分頁
思考:為什么要分頁?
- 查詢的數據量一大,分頁能減少數據的處理量
1.使用limit分頁
很容易想到的是通過Mybatis的xml文件寫sql語句使用limit關鍵字分頁
語法: select * from user limit startIndex,pageSize;
上面的語句表示:從下標startIndex開始,取pageSize個數據出來(startIndex下標從0開始)
如果sql語句只寫一個參數:
select * from user limit 3;

那如何使用Mybatis實現分頁呢?
使用Mybatis實現分頁的核心還是上面的分頁sql語句
1.接口
//分頁
List<User> getUserByLimit(Map<String, Integer> map);

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();
}

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();
}

3.使用分頁插件分頁
https://pagehelper.github.io/ 分頁插件官網,后續補充!
碼雲地址:https://gitee.com/mo18/Mybatis-Study.git 這篇文章在mybatis-04模塊!
