1.问题描述

JAVA界ORM的两位大佬Hibernate和Mybatis,hb自带分页(上手挺快,以前用了好几年hb,后期运维及优化快疯了),mybatis没有分页功能,需要借助第三方插件来完成,比较流行的三方框架:PageHelper,今天结合springboot做下介绍,直接贴线上配置,保证可用(如有遗漏,朋友们可以指正下)。

2. 解决方案

2.1 配置项目pom.xml

  1. <!--分页-->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. <version>5.1.8</version>
  6. </dependency>

2.2 配置PageHelper参数

方式比有很多,这里只介绍使用过的两种吧。

方式一,使用标签Configuration:


  1. public class PageHelperConfig {
  2. @Bean
  3. public PageHelper getPageHelper(){
  4. PageHelper pageHelper=new PageHelper();
  5. Properties properties=new Properties();
  6. properties.setProperty("helperDialect","mysql");
  7. properties.setProperty("reasonable","true");
  8. properties.setProperty("supportMethodsArguments","true");
  9. properties.setProperty("params","count=countSql");
  10. pageHelper.setProperties(properties);
  11. return pageHelper;
  12. }
  13. }

方式二,因为我们当时mybatis插件自动生成了一个xml,就直接放xml里了。跟sp的无配置文件概念是不是有点冲突? 这里简单啰嗦一句,其实软件的过程有点三十年河东三十年河西的味道,以前是要配置集中化,都由几个中心配置文件管理;现在是去中心化,全部通过标签来定义;看个人习惯吧,我们项目中除了application.yml也还有两个配置文件,一个是数据库和事务aop那个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. <!--设置-->
  7. <settings>
  8. <!-- 全局映射器启用缓存 -->
  9. <setting name="cacheEnabled" value="false"/>
  10. <!-- 查询时,关闭关联对象即时加载以提高性能 -->
  11. <setting name="lazyLoadingEnabled" value="true"/>
  12. <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
  13. <setting name="aggressiveLazyLoading" value="false"/>
  14. <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
  15. <setting name="multipleResultSetsEnabled" value="true"/>
  16. <!-- 允许使用列标签代替列名 -->
  17. <setting name="useColumnLabel" value="true"/>
  18. <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
  19. <setting name="useGeneratedKeys" value="true"/>
  20. <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
  21. <setting name="autoMappingBehavior" value="FULL"/>
  22. <!-- 对于批量更新操作缓存SQL以提高性能 但是返回id有问题-->
  23. <setting name="defaultExecutorType" value="SIMPLE"/>
  24. <!-- 数据库超过36000秒仍未响应则超时 -->
  25. <setting name="defaultStatementTimeout" value="36000"/>
  26. <!-- 日志使用logback实现 -->
  27. <!--<setting name="logImpl" value="LOGBACK"/>-->
  28. <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
  29. <setting name="mapUnderscoreToCamelCase" value="true"/>
  30. </settings>
  31. <plugins>
  32. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  33. <property name="offsetAsPageNum" value="false"/>
  34. <property name="rowBoundsWithCount" value="false"/>
  35. <property name="pageSizeZero" value="true"/>
  36. <property name="reasonable" value="false"/>
  37. <property name="supportMethodsArguments" value="false"/>
  38. <property name="returnPageInfo" value="none"/>
  39. </plugin>
  40. </plugins>
  41. </configuration>

2.3 项目中使用

使用示例:

  1. public Object getAppUsers(ShareAppsVO shareAppsVO) {
  2. //分页就这一行就可以了两个参数,一是当前页,一是每页显示的条数
  3. PageHelper.startPage(shareAppsVO.getCurrentPage(), shareAppsVO.getPageSize());
  4. List<DmaAppUser> dmaAppUsers = dmaAppUserMapper.getAppUsers(shareAppsVO);
  5. PageInfo<DmaAppUser> pageInfo = new PageInfo<DmaAppUser>(dmaAppUsers);
  6. Page page = new Page();
  7. page.setData(dmaAppUsers);
  8. //这里注意下,正常情况下,只需要上一页下一页的话,就不用PageInfo,info主要用于获取总页数了。PageHelper自带的类
  9. page.setTotal(pageInfo.getTotal());
  10. return page;
  11. }

注意: PageHelper.startPage(shareAppsVO.getCurrentPage(), shareAppsVO.getPageSize()); 需要放到执行mybatis代码前一页,否则会有问题,网上也有解决该问题的方案,该场景没碰到就不测试了。


springboot +mybatis分页插件PageHelper的更多相关文章

  1. SpringBoot Mybatis 分页插件PageHelper

    添加maven配置: <!-- 分布插件 --> <dependency> <groupId>com.github.pagehelper</groupId&g ...

  2. Mybatis分页插件PageHelper的配置和使用方法

     Mybatis分页插件PageHelper的配置和使用方法 前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分 ...

  3. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  4. Java SSM框架之MyBatis3(三)Mybatis分页插件PageHelper

    引言 对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写count和select ...

  5. Mybatis学习---Mybatis分页插件 - PageHelper

    1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...

  6. Mybatis分页插件PageHelper的实现

    Mybatis分页插件PageHelper的实现 前言 分页这个概念在做web网站的时候很多都会碰到 说它简单吧 其实也简单 小型的网站,完全可以自己写一个,首先查出数据库总条数,然后按照分页大小分为 ...

  7. 基于Mybatis分页插件PageHelper

    基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 ...

  8. Mybatis分页插件-PageHelper的使用

    转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就 ...

  9. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示

    http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...

随机推荐

  1. C#基础:ref和out的区别 [转]

    ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...

  2. 如何计算memcache的容量

    在容量足够的情况下,当然是越大越好,但这样会造成浪费.不考虑这种情况.我们一般的情况是: memcache集群一开始创建会根据存储的数据量与访问量进行容量大小的估算.再算一个20%的冗余. 在网站快速 ...

  3. C++中代理类和句柄类

    指针是 C 与其他语言区别的重要特征之一,在 C++ 中,指针也被广泛运用,我们通过指针实现多态.然而,众所周知,指针的使用必须小心,否则很容易造成内存泄漏 Memory Leak.当我们有几个指针指 ...

  4. Debug监视器(监视运行期程序通过API函数OutputDebugString输出的字符串)

    http://download.csdn.net/detail/zswang/207199

  5. hdu4767_Bell_矩阵快速幂+中国剩余定理

    2013长春赛区网络赛的1009题 比赛的时候这道题英勇的挂掉了,原因是写错了一个系数,有时候粗心比脑残更可怕 本题是关于Bell数,关于Bell数的详情请见维基:http://en.wikipedi ...

  6. CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写

    互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...

  7. Laravel --- 【转】安装调试利器 Laravel Debugbar

    [转]http://www.tuicool.com/articles/qYfmmur 1.简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显 ...

  8. Django之F、Q查询,事务,自定义char字段

    F查询 from django.db.models import F,Q # 当查询条件来自于数据库的某个字段,这个时候就必须使用F # 查询卖出数大于库存数的商品 res = models.Prod ...

  9. Flume 简介及基本使用

    一.Flume简介 Apache Flume是一个分布式,高可用的数据收集系统.它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集.Flume 分为 NG 和 OG (1 ...

  10. spring 5.x 系列第20篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置类为com.heibaiyin ...