天天看点

mybatis分页查询

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.使用方法

  1. 在业务层调用查询方法时设置分页相关操作:
/**
            * 分页查询
            * @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插件到配置中即可)

详细使用,参考地址

继续阅读