1.1 项目环境
1.2 limit实现分页
为什么需要分页?
在使用mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,可以通过使用分页进行查询,也就是每次处理小部分数据,这样数据库压力就在可控范围内。
使用Limit实现分页
#级别语法
SELECT * FROM table LIMIT stratIndex,pageSize
# 检索记录行 6-15
SELECT * FROM table LIMIT 5,10;
#如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM table LIMIT 5; //检索前 5 个记录行
#换句话说,LIMIT n 等价于 LIMIT 0,n。
UserMapper
// 分页查询
List<User> getUserByLimit(Map<String, Integer> map);
UserMapper.xml
<!--分页操作-->
<select id="getUserByLimit" parameterType="map" resultType="user">
select * from user limit #{startIndex},#{pageSize}
</select>
1.2.1 代码示例
/*
* 分页测试
*/
@Test
public void getUserByLimit(){
// 1.通过工具类得到会话对象
SqlSession sqlSession = MybatisUtils.getSession();
// 2.会话对象的得到mapper接口代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 3.创建Map集合
HashMap<String, Integer> map = new HashMap<>();
// 往集合中添加数据
map.put("startIndex", 0);
map.put("pageSize", 2);
List<User> users = mapper.getUserByLimit(map);
users.forEach(System.out::println);
}
1.2.2 执行结果
1.3 RowBounds分页
除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页。
UserMapper
// RowBounds分页(Java代码实现)
List<User> getUserByRowBounds();
UserMapper.xml
<!--3.分页操作-->
<select id="getUserByRowBounds" resultType="user">
select * from user
</select>
1.3.1 代码示例
/*
* RowBounds类(Java实现)
*/
@Test
public void getUserByRowBounds(){
// 1.通过工具类得到会话对象
SqlSession sqlSession = MybatisUtils.getSession();
// 2.RowBounds类实现
RowBounds rowBounds = new RowBounds(1, 2);
// 3.通过Java代码层面实现分页
List<User> users = sqlSession.selectList("cn.guardwhy.dao.UserMapper.getUserByRowBounds", null, rowBounds);
users.forEach(System.out::println);
// 4.关闭会话
sqlSession.close();
}
1.3.2 执行结果
1.4 PageHelper插件
PageHelper插件官方地址: https://pagehelper.github.io/
官方文档使用: https://pagehelper.github.io/docs/howtouse/