mybaits中分页查询
Mybatis内置了RowBounds分页组件,通过在查询时传入RowBounds对象即可完成分页功能,但是RowBounds默认是逻辑分页,因此在进行大量数据查询时,效率较低,因此需要使用物理分页提高查询效率;另一种分页方式即使用第三方的分页插件PageHelper
RowBounds分页
RowBounds分页的使用方式包含两种方式:
1.直接调用SqlSession对象提供的selectList方法实现:
2.在Mapper接口中定义查询方法时,声明RowBounds作为查询参数:
/**
* 分页查询
* RowBounds提供了一个包含两个参数的构造器
* 参数1:offset 查询起始位
* 参数2:limit 查询的数据行数
* @param rb 需要包含了页码信息的RowBounds对象
* @return
*/
List<Student> selectAll(RowBounds rb);
对于以上第二种方式,只需要在业务层调用方法时传入RowBounds对象即可:
/**
* 分页查询
* RowBounds提供了一个包含两个参数的构造器
* 参数1:offset 查询起始位
* 参数2:limit 查询的数据行数
* @param rb 需要包含了页码信息的RowBounds对象
* @return
*/
List<Student> selectAll(RowBounds rb);
注意事项:
因为RowBounds内部是基于内存的分页,实际是在数据库将将数据全部查询出来,然后通过List集合的subList方法实现截取,所以在进行大量数据查询时会消耗较大的内存从而影响性能。
PageHelper分页插件
1.首先需要下载插件
下载网站
2.jar导入Moudle
Ctrl+shift+alt+s 打开 project Structure
在Modules中选中当前项目,选择Dependencies将下载的两个jar包导入进去
- jsqlparser.jar
- pageHelper.jar
3.配置文件
在核心配置文件中添加
<!-- 添加分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
4.使用方法
- 在业务层调用查询方法时设置分页相关操作:
/**
* 分页查询
* @param pageNow 当前页
* @param pageSize 每页记录条数
*/
public PageInfo<Student> queryByPage(int pageNow,int pageSize){
SqlSession session = MybatisUtils.getSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
//设置分页 第三个参数为排序字段
PageHelper.startPage(pageNow,pageSize,"age");
//无需排序的使用
//PageHelper.startPage(pageNow,pageSize);
//执行查询
List<Student> list = mapper.selectAll2();
for (Student s:list) {
System.out.println(s);
}
//根据集合构建PageInfo对象(包含分页的一切信息)
PageInfo<Student> page = new PageInfo<>(list);
return page;
}
注意事项
PageHelper对RowBounds分页也提供了完美的支持,对于RowBounds分页,可以无需做任何修改,PageHelper会自动将逻辑分页转换为物理分页实现(即不用修改方法一种的任何代码,只需添加PageHelper插件到配置中即可)
详细使用,参考地址