Mybatis 分页插件 PageHelper 5.1.5 发布

Liuzh_533
 Liuzh_533
发布于 2018年09月03日
收藏 8

如果你也在用 Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。

该插件目前支持以下数据库的物理分页

  1. Oracle

  2. Mysql

  3. MariaDB

  4. SQLite

  5. Hsqldb

  6. PostgreSQL

  7. DB2

  8. SqlServer(2005+)

  9. Informix

  10. H2

  11. SqlServer2012

  12. Derby

  13. Phoenix

  14. 达梦数据库

5.1.5 更新日志

  • 优化代码,去掉没必要的校验(by lenosp)

  • 解决 pageKey 多处理一次的小问题 #268

  • 新增 gitee 提供的 javadoc 文档(https://apidoc.gitee.com/free/Mybatis_PageHelper)

  • 解决默认反射不带缓存的问题 fixed #275

  • 优化mysql ifnull函数导致分页性能问题 (by miaogr)(这个修改最终改成了下面的 aggregateFunctions

  • jsqlparser 升级为 1.2 版本,和 1.0 有不兼容的情况,已经解决。 fixed 273

  • 去掉 PageInfo 中存在歧义的 g(s)etFirstPage 和 g(s)etLastPage 两个方法

  • 抛出排序时解析失败的异常 fixed #257

  • 解决 Spring <bean> 方式配置时,没有 properties 属性时的初始化问题 fixed #26

  • 修复Oracle分页会漏查数据的问题 (by muyun12)

  • 新增 aggregateFunctions 参数(CountSqlParser), 允许手动添加聚合函数(影响行数),所有以聚合函数开头的函数,在进行 count 转换时,会套一层。其他函数和列会被替换为 count(0),其中count列可以自己配置。

增加 aggregateFunctions 参数后,和原先最大的区别是,如果存在 select ifnull(xxx, yy) from table ...,原先的 count 查询是 select count(0) from (select ifnull(xxx, yy) from table ...) temp_count,现在会区别聚合函数,如果不是聚合函数,就会变成 select count(0) from table ...

默认包含的聚合函数前缀如下:

"APPROX_COUNT_DISTINCT," +
"ARRAY_AGG," +
"AVG," +
"BIT_" +
//"BIT_AND," +
//"BIT_OR," +
//"BIT_XOR," +
"BOOL_," +
//"BOOL_AND," +
//"BOOL_OR," +
"CHECKSUM_AGG," +
"COLLECT," +
"CORR," +
//"CORR_," +
//"CORRELATION," +
"COUNT," +
//"COUNT_BIG," +
"COVAR," +
//"COVAR_POP," +
//"COVAR_SAMP," +
//"COVARIANCE," +
//"COVARIANCE_SAMP," +
"CUME_DIST," +
"DENSE_RANK," +
"EVERY," +
"FIRST," +
"GROUP," +
//"GROUP_CONCAT," +
//"GROUP_ID," +
//"GROUPING," +
//"GROUPING," +
//"GROUPING_ID," +
"JSON_," +
//"JSON_AGG," +
//"JSON_ARRAYAGG," +
//"JSON_OBJECT_AGG," +
//"JSON_OBJECTAGG," +
//"JSONB_AGG," +
//"JSONB_OBJECT_AGG," +
"LAST," +
"LISTAGG," +
"MAX," +
"MEDIAN," +
"MIN," +
"PERCENT_," +
//"PERCENT_RANK," +
//"PERCENTILE_CONT," +
//"PERCENTILE_DISC," +
"RANK," +
"REGR_," +
"SELECTIVITY," +
"STATS_," +
//"STATS_BINOMIAL_TEST," +
//"STATS_CROSSTAB," +
//"STATS_F_TEST," +
//"STATS_KS_TEST," +
//"STATS_MODE," +
//"STATS_MW_TEST," +
//"STATS_ONE_WAY_ANOVA," +
//"STATS_T_TEST_*," +
//"STATS_WSR_TEST," +
"STD," +
//"STDDEV," +
//"STDDEV_POP," +
//"STDDEV_SAMP," +
//"STDDEV_SAMP," +
//"STDEV," +
//"STDEVP," +
"STRING_AGG," +
"SUM," +
"SYS_OP_ZONE_ID," +
"SYS_XMLAGG," +
"VAR," +
//"VAR_POP," +
//"VAR_SAMP," +
//"VARIANCE," +
//"VARIANCE_SAMP," +
//"VARP," +
"XMLAGG"

想要增加新的聚合函数前缀可以配置 aggregateFunctions,多个值用英文逗号隔开。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Mybatis 分页插件 PageHelper 5.1.5 发布
加载中

最新评论(6

egzosn
egzosn

引用来自“egzosn”的评论

https://gitee.com/egzosn/mybatis-page-plug
:grin:

引用来自“Liuzh_533”的评论

昨天仔细看了看你这里的实现方式,这种方式的最大缺点就是兼容性差(mybatis 3.1.0~3.4.6 接口变了好几次),想要解决兼容性问题就需要动态代理处理指定的方法。。这种方式实际上又变成了mybatis的拦截器方式,因此没必要这么做。不考虑兼容性的前提下,你的代码还可以更简化。这种方式的优点是和拦截器相比容易理解。
兼容性方面,当时没有进行考虑,因为当时跟踪了下源码就简单的去实现了一下,Page可以不用去继承List,网络上的有很多的实现方式与你的差不多,直接继承List去作为返回。不过兼容方面需要考虑的话,需要认真的过一遍mybatis-pagehelper源码,在进行扩展或者说兼容别的版本不是不可以,因为让别人更简单更容易理解这个是我一直想做的也是一直在做的。哈哈!不过轻,就会造成不够全面。:stuck_out_tongue:
Liuzh_533
Liuzh_533

引用来自“egzosn”的评论

https://gitee.com/egzosn/mybatis-page-plug
:grin:
昨天仔细看了看你这里的实现方式,这种方式的最大缺点就是兼容性差(mybatis 3.1.0~3.4.6 接口变了好几次),想要解决兼容性问题就需要动态代理处理指定的方法。。这种方式实际上又变成了mybatis的拦截器方式,因此没必要这么做。不考虑兼容性的前提下,你的代码还可以更简化。这种方式的优点是和拦截器相比容易理解。
egzosn
egzosn

引用来自“egzosn”的评论

https://gitee.com/egzosn/mybatis-page-plug
:grin:

引用来自“Liuzh_533”的评论

思路很好,我曾经给官方提交过一个默认的 PagingExecutor 实现(https://github.com/mybatis/mybatis-3/pull/861),当时没想过用你这种方式替换。。我觉得分页插件 6.0 版本可能有希望出现了。
谢谢,几个月前第一次把mybatis用到项目上,以前我是排斥的。在分页上考虑过使用你这个,因为你这个很赞,就是稍微比较重了一些,我这个项目比较精简只是为了解决当时的需求吧。期待你的6.0的出现.

哈哈!这里打个小广告
https://gitee.com/egzosn/pay-java-parent
#pay-java-parent#
优雅的轻量级支付模块集成支付对接支付整合,支付与业务完全剥离,简单几行代码即可实现支付,简单快速完成支付模块的开发,可轻松嵌入到任何系统里 目前仅是一个开发工具包
开源中国首席架构狮
开源中国首席架构狮
这可能是MyBatis上最好的分页插件了,给增辉哥点赞。
Liuzh_533
Liuzh_533

引用来自“egzosn”的评论

https://gitee.com/egzosn/mybatis-page-plug
:grin:
思路很好,我曾经给官方提交过一个默认的 PagingExecutor 实现(https://github.com/mybatis/mybatis-3/pull/861),当时没想过用你这种方式替换。。我觉得分页插件 6.0 版本可能有希望出现了。
返回顶部
顶部