Mybatis中分頁的幾種實現方式


分頁

思考:為什么要分頁?

  • 查詢的數據量一大,分頁能減少數據的處理量

1.使用limit分頁

很容易想到的是通過Mybatis的xml文件寫sql語句使用limit關鍵字分頁

語法:  select * from user limit startIndex,pageSize;

上面的語句表示:從下標startIndex開始,取pageSize個數據出來(startIndex下標從0開始)

如果sql語句只寫一個參數:

select * from user limit 3;

image-20210425194434651

那如何使用Mybatis實現分頁呢?

使用Mybatis實現分頁的核心還是上面的分頁sql語句

1.接口

//分頁
List<User> getUserByLimit(Map<String, Integer> map);

image-20210425200043872

2.Mapper.xml

<!--分頁-->
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    select * from user limit #{startIndex},#{pageSize}
</select>

3.測試

@Test
public void getUserByLimitTest(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    Map<String, Integer> map = new HashMap<>();
    map.put("startIndex",1);
    map.put("pageSize",2);

    List<User> userList = mapper.getUserByLimit(map);
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();
}

image-20210425200259627

2.使用RowBounds類分頁

上面使用limit分頁並沒有體現java面向對象的思想,就出現了這個類來分頁(不建議開發中使用這個)

不再使用SQL實現分頁

1.接口

//RowBounds分頁
List<User> getUserByRowBounds();

2.mapper.xml

<!--RowBounds分頁,直接全查,java代碼寫分頁,但RowBounds還是物理分頁,不是內存分頁-->
<select id="getUserByRowBounds"  resultMap="UserMap">
    select * from user
</select>

3.測試

@Test
public void getUserByRowBoundsTest(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    //RowBounds實現,從下標1(startIndex)開始,取2個(pageSize)
    RowBounds rowBounds = new RowBounds(1, 2);

    //通過java代碼層面實現分頁
    List<User> userList = sqlSession.selectList(
        "com.kuang.dao.UserMapper.getUserByRowBounds",null,rowBounds);
    for (User user : userList) {
        System.out.println(user);
    }


    sqlSession.close();
}

image-20210425202859799

3.使用分頁插件分頁

https://pagehelper.github.io/ 分頁插件官網,后續補充!

碼雲地址:https://gitee.com/mo18/Mybatis-Study.git 這篇文章在mybatis-04模塊!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM