8、分页
为什么要分页?
- 减少数据的处理量,提高效率
8.1、使用limit分页
使用 limit 分页的语法
select * from user limit startIndex, pageSize
比如查询第三个和第四个元素,从三开始,一共两个(下标从0开始数):
select * from mybatis.user limit 3, 2
如果是从0开始,就只需要写pageSize一个参数
完整的例子:
接口:
List<User> getUserByLimit(Map<String, Object> map);
mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="userMap">
select * from mybatis.user limit #{startIndex}, #{pageSize}
</select>
测试:
@Test
public void TestSelectByLimit() {
try (SqlSession session = MybatisUtils.getSqlSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("startIndex", 2);
map.put("pageSize", 3);
List<User> userList = mapper.getUserByLimit(map);
for (User u: userList) logger.info(u);
}
}
8.2、使用RowBounds实现分页
不推荐使用这种方法,面向对象的方法不如直接用 sql 效率高。
接口不需要参数:
List<User> getUserByRowBounds();
sql 查找全部
<select id="getUserByRowBounds" resultMap="userMap">
select * from mybatis.user
</select>
在测试中用 Row Bounds 对象指定范围
@Test
public void TestSelectByRowBounds() {
try (SqlSession session = MybatisUtils.getSqlSession()) {
// RowBounds 参数是startIdex,pageSize
RowBounds rowBounds = new RowBounds(3, 2);
// 接口全路径,null,rowBounds
List<User> userList = session.selectList("com.dzy.dao.UserMapper.getUserByRowBounds", null, rowBounds);
for (User u: userList) logger.info(u);
}
}
8.3、使用第三方插件
比如pageHelper插件:https://pagehelper.github.io/