Mybatis 分页插件 PageHelper 5.0.4 发布

Liuzh_533
 Liuzh_533
发布于 2017年08月01日
收藏 72

Mybatis分页插件 - PageHelper 5.0.4 发布了。   如果你也在用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

如果你使用 Maven 可以在pom.xml 中添加下面的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.0.4</version>
</dependency>

如果使用Spring Boot,可以直接添加下面的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.1.3</version>
</dependency>


     5.0.4 

  • 增加对Phoenix数据库的简单配置支持,配置helperDialect=phoenix即可,也可以自动识别Phoenix数据库的 jdbc url。

  • count 查询的缓存msCountMapkey 改为String类型,key 为 count 查询的MappedStatement的 id。

  • 增加countSuffixcount 查询后缀配置参数,该参数是针对PageInterceptor配置的,默认值为_COUNT。

  • 增加手写 count 查询支持,详情看下面介绍。

    增加手写 count 查询支持

    增加countSuffixcount 查询后缀配置参数,该参数是针对PageInterceptor配置的,默认值为_COUNT。

    分页插件会优先通过当前查询的 msId +countSuffix查找手写的分页查询。

    如果存在就使用手写的 count 查询,如果不存在,仍然使用之前的方式自动创建 count 查询。

    例如,如果存在下面两个查询:

<select id="selectLeftjoin" resultType="com.github.pagehelper.model.Country">
    select a.id,b.countryname,a.countrycode from country a
    left join country b on a.id = b.id
    order by a.id
</select>
<select id="selectLeftjoin_COUNT" resultType="Long">
    select count(distinct a.id) from country a
    left join country b on a.id = b.id
</select>

上面的countSuffix使用的默认值_COUNT,分页插件会自动获取到selectLeftjoin_COUNT查询,这个查询需要自己保证结果数正确。

返回值的类型必须是resultType="Long",入参使用的和selectLeftjoin查询相同的参数,所以在 SQL 中要按照selectLeftjoin的入参来使用。

因为selectLeftjoin_COUNT方法是自动调用的,所以不需要在接口提供相应的方法,如果需要单独调用,也可以提供。

上面方法执行输出的部分日志如下:

DEBUG [main] - ==>  Preparing: select count(distinct a.id) from country a left join country b on a.id = b.id 
DEBUG [main] - ==> Parameters: 
TRACE [main] - <==    Columns: C1
TRACE [main] - <==        Row: 183
DEBUG [main] - <==      Total: 1
DEBUG [main] - Cache Hit Ratio [com.github.pagehelper.mapper.CountryMapper]: 0.0
DEBUG [main] - ==>  Preparing: select a.id,b.countryname,a.countrycode from country a left join country b on a.id = b.id order by a.id LIMIT 10 
DEBUG [main] - ==> Parameters: 
TRACE [main] - <==    Columns: ID, COUNTRYNAME, COUNTRYCODE
TRACE [main] - <==        Row: 1, Angola, AO
TRACE [main] - <==        Row: 2, Afghanistan, AF
TRACE [main] - <==        Row: 3, Albania, AL


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

精彩评论

红薯官方
红薯官方
不要为了页面上面的翻页按钮而专门准备 count 查询,也不希望人知道系统里面有多少条数据。
如果翻页,每页显示10条,如果返回的数据<10则认为没有下一页,如果刚好10条则推测可能有下一页,如果返回数据=0则没有下一页。
每次更新最大的页码,就知道最大的页码是多少。
蒲池幸子
蒲池幸子
虽然现在在使用mybatis-plus,单还是支持。以前一直在用pagehelper

最新评论(20

Chet_W
Chet_W

引用来自“_hejg”的评论

排序功能呢。
独立出来了orderby helper
_
_hejg
排序功能呢。
蒲池幸子
蒲池幸子
虽然现在在使用mybatis-plus,单还是支持。以前一直在用pagehelper
loveminer
loveminer
支持
Liuzh_533
Liuzh_533

引用来自“Chet_W”的评论

有没有办法分页的时候让开发者对单个查询可以选择要/不要count?同一服务下,有些数据量小,需要count,有些表数据量太大,count反而更耗时间,分页查询时可以选择不count。

引用来自“Liuzh_533”的评论

count是可配的,不是必须的。

引用来自“Chet_W”的评论

Github上HowToUse说明还不够,看起来比较费解。
其实在params配置项中,有个count的配置,但默认是countSql,我一直以为这是自定义countSql的要写到这个参数.....
跟了下源码才发现,原来mybatis config param配置项中的countSql为是否计数的标记,是布尔值。就是起这个是否需要count的作用的。😅😅😅
名字是可以自定义的,起这么个名字是为了避免误用。
Chet_W
Chet_W

引用来自“Chet_W”的评论

有没有办法分页的时候让开发者对单个查询可以选择要/不要count?同一服务下,有些数据量小,需要count,有些表数据量太大,count反而更耗时间,分页查询时可以选择不count。

引用来自“Liuzh_533”的评论

count是可配的,不是必须的。
Github上HowToUse说明还不够,看起来比较费解。
其实在params配置项中,有个count的配置,但默认是countSql,我一直以为这是自定义countSql的要写到这个参数.....
跟了下源码才发现,原来mybatis config param配置项中的countSql为是否计数的标记,是布尔值。就是起这个是否需要count的作用的。😅😅😅
Liuzh_533
Liuzh_533

引用来自“Chet_W”的评论

有没有办法分页的时候让开发者对单个查询可以选择要/不要count?同一服务下,有些数据量小,需要count,有些表数据量太大,count反而更耗时间,分页查询时可以选择不count。
count是可配的,不是必须的。
红薯官方
红薯官方

引用来自“蓝水晶飞机”的评论

不要为了页面上面的翻页按钮而专门准备 count 查询,也不希望人知道系统里面有多少条数据。
如果翻页,每页显示10条,如果返回的数据<10则认为没有下一页,如果刚好10条则推测可能有下一页,如果返回数据=0则没有下一页。
每次更新最大的页码,就知道最大的页码是多少。

引用来自“Chet_W”的评论

大表查的实现也都是这样的,但用分页插件的是,现在每次都会给我查出来count,还比较耗时,实际有些时候不需要count。
我也是用了这个插件做翻页的,但是我配置它不要进行count查询了。
1363435084
1363435084
great
Chet_W
Chet_W

引用来自“蓝水晶飞机”的评论

不要为了页面上面的翻页按钮而专门准备 count 查询,也不希望人知道系统里面有多少条数据。
如果翻页,每页显示10条,如果返回的数据<10则认为没有下一页,如果刚好10条则推测可能有下一页,如果返回数据=0则没有下一页。
每次更新最大的页码,就知道最大的页码是多少。
大表查的实现也都是这样的,但用分页插件的是,现在每次都会给我查出来count,还比较耗时,实际有些时候不需要count。
返回顶部
顶部