1. 程式人生 > 實用技巧 >MyBatis實現分頁功能

MyBatis實現分頁功能

思考:為什麼需要分頁

  • 減少資料的處理量
  • 增加頁面的可閱讀性

1、limit基礎使用

# 語法
select * from table limit startIndex,pageSize;
# 從第5條資料開始,顯示10行
select * from table limit 4,10;

# limit 第二個引數為-1時,表示從第一個引數開始,查詢後面的所有記錄
# 現在已經不能使用了,詳情見:https://bugs.mysql.com/bug.php?id=2037

#如果只給定一個引數,它表示返回最大的記錄行數目:   
select * from table limit 5; //檢索前5個記錄行  
#等價於select * from table limit 0,5;

2、使用limit實現分頁

具體步驟:

  1. 編寫Mapper介面

    public interface UserMapper {
        // 分頁查詢
        List<User> getUserByLimit(Map<String, Integer> map);
    }
    
  2. 編寫Mapper.xml檔案

    <select id="getUserByLimit" parameterType="map" resultMap="userMap">
        select *
        from mybatis.user
        limit #{startIndex},#{pageSize}
    </select>
    
  3. 測試類中傳入引數

    @Test
    public void getUserByLimit() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Integer> map = new HashMap<>();
        map.put("startIndex",1);
        map.put("pageSize",2);
        List<User> userList = userMapper.getUserByLimit(map);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    

3、使用RowBounds分頁

​ 我們除了使用Limit在SQL層面實現分頁,也可以使用RowBounds在Java程式碼層面實現分頁,當然此種方式作為瞭解即可,此種方式現在已經不推薦使用

具體步驟:

  1. 定義Mapper介面

    public interface UserMapper {
        List<User> getUserByRowBounds();
    }
    
  2. 編寫Mapper.xml檔案

    <select id="getUserByRowBounds" resultMap="userMap">
        select *
        from mybatis.user
    </select>
    
  3. 編寫測試類,使用RowBounds

    @Test
    public void getUserByRowBounds() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        int currentPage = 2;  //第幾頁
        int pageSize = 2;  //每頁顯示幾個
        int startIndex = (currentPage - 1) * pageSize; // 從第幾行開始查詢
        RowBounds rowBounds = new RowBounds(startIndex,pageSize);
        //通過session.**方法進行傳遞rowBounds,[此種方式現在已經不推薦使用了]
        List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserByRowBounds", null, rowBounds);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    

4、使用分頁外掛分頁

使用pageHelper外掛進行分頁

官網:https://mybatis.io/

瞭解即可,萬一以後公司的架構師說要使用,你需要知道它!