当前位置:   article > 正文

Mybatis分页插件——PageHelper快速入门_mybatis pagehelper

mybatis pagehelper

        在实际工作中,有很多进行列表查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据;2. 统计符合条件的数据总数;而这,又会导致我们必然至少要写2个sql进行操作。这无形中增加了我们的工作量,另外,当发生需要变动时,我们又需要同时改动这两个sql,否则必然导致结果的不一致。

        因此,我们需要一个简单易用的分页工具来帮我们完成这个工作了,需求明确,至于如何实现则各有千秋。而我们要说的 pageHelper则是这其中实现比较好的一件的组件了,我们就一起来看看如何使用它进行提升工作效率吧!

① pageHelper 的依赖引入

pom.xml 中引入pageHelper依赖:

(1)如果是 springboot,则可以直接引入 pagehelper-spring-boot-starter,它会帮我们省去许多不必要的配置。

  1. <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.2.12</version>
  6. </dependency>

(2)如果是普通的 springmvc 类的项目,则引入 pageHelper 即可。

  1. <!-- pageHelper -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. <version>5.1.10</version>
  6. </dependency>

② pagehelper插件配置

(1)如果是 springboot,则直接配置几个配置项即可:

  1. # mybatis 相关配置
  2. mybatis:
  3. #... 其他配置信息
  4. configuration-properties:
  5. helperDialect: mysql
  6. offsetAsPageNum: true
  7. rowBoundsWithCount: true
  8. reasonable: true
  9. mapper-locations: mybatis/mapper/*.xml

(2)如果是普通 springmvc 项目配置:mybatis-config.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <plugins>
  7. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  8. <!-- 该参数指明要连接的是哪个数据库 -->
  9. <property name="helperDialect" value="mysql"/>
  10. <!-- 该参数默认为false -->
  11. <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
  12. <!-- 和startPage中的pageNum效果一样-->
  13. <property name="offsetAsPageNum" value="true"/>
  14. <!-- 该参数默认为false -->
  15. <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
  16. <property name="rowBoundsWithCount" value="true"/>
  17. <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
  18. <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
  19. <property name="pageSizeZero" value="true"/>
  20. <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
  21. <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
  22. <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
  23. <property name="reasonable" value="true"/>
  24. <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
  25. <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
  26. <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
  27. <!-- 不理解该含义的前提下,不要随便复制该配置 -->
  28. <property name="params" value="pageNum=start;pageSize=limit;"/>
  29. <!-- 支持通过Mapper接口参数来传递分页参数 -->
  30. <property name="supportMethodsArguments" value="true"/>
  31. <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
  32. <property name="returnPageInfo" value="check"/>
  33. </plugin>
  34. </plugins>
  35. </configuration>

并在配置数据源的时候,将 mybatis 配置文件指向以上文件。

③ pagehelper 的使用 

        使用的时候,只需在查询list前,调用 startPage 设置分页信息,即可使用分页功能。 

  1. public Object getUsers(int pageNum, int pageSize) {
  2. PageHelper.startPage(pageNum, pageSize);
  3. // 不带分页的查询
  4. List<UserEntity> list = userMapper.selectAllWithPage(null);
  5. // 1. 可以将结果转换为 Page , 然后获取 count 和其他结果值
  6. com.github.pagehelper.Page listWithPage = (com.github.pagehelper.Page) list;
  7. System.out.println("listCnt:" + listWithPage.getTotal());
  8. // 2. 也可使用 PageInfo 来接收
  9. PageInfo<UserEntity> pageinfo = new PageInfo(list);
  10. return list;
  11. }

         即使用时,只需提前声明要分页的信息,得到的结果就是有分页信息的了。 如果不想进行 count,只要查分页数据,则调用: PageHelper.startPage(pageNum, pageSize, false);  即可,避免了不必要的 count 消耗。

此分页插件可以结合 BootStrap Table 组件使用,这样的话,在服务端返回给客户端数据时,需要包含 total 和 rows 这两个参数(且参数的 key 必须是 total 和 rows),具体实现在Js表格组件神器中有介绍。

注意:上面的配置只针对于pagehelper4.x版本的,如果你用的是pagehelper5.x版本就要进行以下这样配置

(1)如果是 mybatis 单独使用 PageHelper 分页插件的时候,就需要在 xml 配置中添加如下代码:

  1. <!--
  2. plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
  3. properties?, settings?,
  4. typeAliases?, typeHandlers?,
  5. objectFactory?,objectWrapperFactory?,
  6. plugins?,
  7. environments?, databaseIdProvider?, mappers?
  8. -->
  9. <plugins>
  10. <!-- com.github.pagehelper为PageHelper类所在包名 -->
  11. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  12. <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
  13. <property name="param1" value="value1"/>
  14. </plugin>
  15. </plugins>

(2)如果是 ssm 项目,mybatis 是交由 spring 的 IOC 容器管理的,就需要在 spring 的 xml 配置中添加如下代码(创建工厂中添加):

  1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  2. <!-- 注意其他配置 -->
  3. <property name="plugins">
  4. <array>
  5. <bean class="com.github.pagehelper.PageInterceptor">
  6. <property name="properties">
  7. <!--使用下面的方式配置参数,一行配置一个 -->
  8. <value>
  9. params=value1
  10. </value>
  11. </property>
  12. </bean>
  13. </array>
  14. </property>
  15. </bean>

注:本篇文章参考了Mybatis分页插件: pageHelper的使用及其原理解析  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/88024
推荐阅读
  

闽ICP备14008679号