【pageHelper】Springboot项目中使用PageHelper插件实现分页查询

648 阅读2分钟

前言: 后端实现分页一般可以通过,先查询所需要查询数据的总数,然后根据传入的页面大小和页码进行一定的计算之后进行通过Mysql的limit语句进行查询,这样实现方式的缺点就是需要写两条SQL语句。所以使用pagehelper分页插件,我们就可以很方便的实现分页,极大的提高我们的开发效率。

github地址:github.com/pagehelper/…

引入

springboot项目中引入如下依赖

<!-- mybatis分页插件-->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.4.3</version>
</dependency>

配置

在spring boot的application.properties中可以配置pageHelper的基本信息

#mapper.mappers=tk.mybatis.springboot.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL
# 指定数据库,不指定的话会默认自动检测数据库类型
pagehelper.helperDialect=mysql
# 是否启用分页合理化。
# 启用:会把第0页,当第一页处理。也会把超过最后一页的当做最后一页来处理。
# 不启用:以上两种情况都会返回空数据
pagehelper.reasonable=true
# 默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.supportMethodsArguments=true
# 用于从对象中根据属性名取值,
# 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
# 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.params=count=countSql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=cn.abcd.model.

使用

配置完PageHelper 之后,使用的话,只需要在查询的sql前面添加PageHelper.startPage(pageNum,pageSize);,如果是想知道总数的话,在查询的sql语句后买呢添加 page.getTotal()就可以了。

//代码示例:
public List<T> findByListEntity(T entity) {
        List<T> list = null;
        try {
            Page<?> page =PageHelper.startPage(1,2); 
            System.out.println(getClassName(entity)+"设置第一页两条数据!");
            list = getMapper().findByListEntity(entity);
            System.out.println("总共有:"+page.getTotal()+"条数据,实际返回:"+list.size()+"两条数据!");
        } catch (Exception e) {
            logger.error("查询"+getClassName(entity)+"失败!原因是:",e);
        }
        return list;
    }

问题

在使用PageInfo类中的getTotal()获取总条数时,返回

/**分页查询**/
Page page = PageHelper.startPage(pageNum,pageSize);
projectsList = projectMapper.getUserProjectsByCondition(userName,nowTimeStamp,endTimeStamp,startTimeStamp,typesList,regionsList,status);
PageInfo info = new PageInfo<>(page.getResult());
long size = info.getTotal();//获取总条数