Mybatis分页插件 - PageHelper
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。
分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。
想要使用分页插件?请看如何使用分页插件
该插件目前支持以下数据库的物理分页:
Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005+)
Informix
3.7.3更新日志:
Page继承的ArrayList,原先会根据pageSize初始化大小,这就导致当pageSize过大(如Integer.MAX_VALUE)时的内存溢出(实际数据量很小),此处改为初始化大小为0的List。
当想查询某页后面的全部数据时,可以使用PageHelper.startPage(pageNum, Integer.MAX_VALUE)进行分页,RowBounds(offset, Integer.MAX_VALUE)一样。
针对PageHelper.startPage(1, Integer.MAX_VALUE)优化,会取消分页,直接查询全部数据(能起到pageSizeZero参数所起的作用)。
针对RowBounds(0, Integer.MAX_VALUE)优化,会取消分页,直接查询全部数据(能起到pageSizeZero参数所起的作用)。
Maven坐标
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.3</version> </dependency>
下载JAR包
分页插件pagehelper.jar:
https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql解析工具,你还需要下载jsqlparser.jar(这个文件完全独立,不依赖其他):
项目文档:
如何使用分页插件
如果要使用分页插件,这篇文档一定要看,看完肯定没有问题。
如果和Spring集成不熟悉,可以参考下面两个MyBatis和Spring集成的框架
只有基础的配置信息,没有任何现成的功能,作为新手入门搭建框架的基础
这两个集成框架集成了MyBatis分页插件和MyBatis通用Mapper。
更新日志
包含全部的详细的更新日志。
重要提示
提示很重要,建议一定看一遍!
引用来自“SimonYe”的评论
在线程池环境下,ThreadLocal 会导致线程安全问题引用来自“Liuzh_533”的评论
能举个例子说明会有什么问题吗?怎么产生的?引用来自“SimonYe”的评论
在线程池环境下,ThreadLocal 会导致线程安全问题引用来自“SimonYe”的评论
在线程池环境下,ThreadLocal 会导致线程安全问题引用来自“Liuzh_533”的评论
不会产生线程安全问题,按照文档要求使用,不会有问题。MyBatis大多数异常在Executor调用后,发生异常会自动清除状态。。其他情况下的异常会导致线程不可用,不属于分页插件的问题。引用来自“SimonYe”的评论
在线程池环境下,ThreadLocal 会导致线程安全问题引用来自“liu13430”的评论
3.7.5版本的PageInfo,page.isIsLastPage(),page.isIsFirstPage()
这两个方法怎样有两个is?
PageInfo,page.isIsLastPage(),page.isIsFirstPage()
这两个方法怎样有两个is?
引用来自“liu13430”的评论
我想问问有在生产环境用过的吗?引用来自“Liuzh_533”的评论
有PageHelper.startPage(-1, 10);
List<GameBetDetail> findSaleInfo = gameBetDetailService.findSaleInfo();
System.out.println("=======" + findSaleInfo.size());
结果集的size=0
引用来自“liu13430”的评论
我想问问有在生产环境用过的吗?引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“Liuzh_533”的评论
因为Page继承的ArrayList,所以没有其他的属性,所以需要自己对Page进行包装。。你可以参考自带的PageInfo类。引用来自“admin-user”的评论
pageinfo里面好多属性没有set方法。。。。引用来自“admin-user”的评论
原来不用set...Page<User> users = (Page<User>)mapper.getAllUsers();
PageInfo<User> pages = new PageInfo<User>(users);
这样属性就都有了
引用来自“Liuzh_533”的评论
Page<User> users = (Page<User>)mapper.getAllUsers();这一步不必这么写,直接返回List就行,不需要在这儿强制转换。
引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“Liuzh_533”的评论
因为Page继承的ArrayList,所以没有其他的属性,所以需要自己对Page进行包装。。你可以参考自带的PageInfo类。引用来自“admin-user”的评论
pageinfo里面好多属性没有set方法。。。。引用来自“admin-user”的评论
原来不用set...Page<User> users = (Page<User>)mapper.getAllUsers();
PageInfo<User> pages = new PageInfo<User>(users);
这样属性就都有了
这一步不必这么写,直接返回List就行,不需要在这儿强制转换。
引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“Liuzh_533”的评论
因为Page继承的ArrayList,所以没有其他的属性,所以需要自己对Page进行包装。。你可以参考自带的PageInfo类。引用来自“admin-user”的评论
pageinfo里面好多属性没有set方法。。。。Page<User> users = (Page<User>)mapper.getAllUsers();
PageInfo<User> pages = new PageInfo<User>(users);
这样属性就都有了
引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“Liuzh_533”的评论
因为Page继承的ArrayList,所以没有其他的属性,所以需要自己对Page进行包装。。你可以参考自带的PageInfo类。引用来自“admin-user”的评论
pageinfo里面好多属性没有set方法。。。。引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“Liuzh_533”的评论
因为Page继承的ArrayList,所以没有其他的属性,所以需要自己对Page进行包装。。你可以参考自带的PageInfo类。引用来自“admin-user”的评论
为什么ajax响应回来的Page<User>类型的数据是list<User>类型的数据,就是没有page里面的属性。可能是什么原因导致的呢引用来自“平安北京”的评论
我用自己写的,好几年了