mybatis分页插件pagehelper
如果你也在用 mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。pagehelper是一个mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工.
pagehelper的使用
优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。1.引入pagehelper依赖
|
1 2 3 4 5 |
<dependency> <groupid>com.github.pagehelper</groupid> <artifactid>pagehelper</artifactid> <version> 5.1 . 2 <ersion> </dependency> |
2.配置applicationcontext.xml文件
在spring的 sqlsessionfactory 的 bean 中增加一个分页拦截器属性
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<bean id= "sqlsessionfactory" class = "org.mybatis.spring.sqlsessionfactorybean" > <property name= "plugins" > <array> <bean class = "com.github.pagehelper.pageinterceptor" > <property name= "properties" > <value> <!-- 这里设定你的数据库类型 --> helperdialect=mysql </value> </property> </bean> </array> </property> </bean> |
3.调用pagehelper的方法
在service方法中调用pagehelper的静态方法 startpage (注意一定要在实际查询数据库之前调用该方法),传入需要查询的页号和每页大小,返回pagehelper插件提供的pageinfo对象。即可自动完成数据库物理分页,无须在你的sql语句中手工加 limit 子句
4. pageinfo的结构
关于pageinfo的结构请参看源码,这里通过返回的json来展示。根据需要取pageinfo对象的相应属性即可。
5.pageinfo类说明
类源码(更多源码去github上查看即可):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
public class pageinfo<t> implements serializable { private static final long serialversionuid = 1l; //当前页 private int pagenum; //每页的数量 private int pagesize; //当前页的数量 private int size;
//由于startrow和endrow不常用,这里说个具体的用法 //可以在页面中"显示startrow到endrow 共size条数据"
//当前页面第一个元素在数据库中的行号 private int startrow; //当前页面最后一个元素在数据库中的行号 private int endrow; //总记录数 private long total; //总页数 private int pages; //结果集 private list<t> list;
//前一页 private int prepage; //下一页 private int nextpage;
//是否为第一页 private boolean isfirstpage = false ; //是否为最后一页 private boolean islastpage = false ; //是否有前一页 private boolean haspreviouspage = false ; //是否有下一页 private boolean hasnextpage = false ; //导航页码数 private int navigatepages; //所有导航页号 private int [] navigatepagenums; //导航条上的第一页 private int navigatefirstpage; //导航条上的最后一页 private int navigatelastpage;
public pageinfo() { }
/** * 包装page对象 * * @param list */ public pageinfo(list<t> list) { this (list, 8 ); }
/** * 包装page对象 * * @param list page结果 * @param navigatepages 页码数量 */ public pageinfo(list<t> list, int navigatepages) { if (list instanceof page) { page page = (page) list; this .pagenum = page.getpagenum(); this .pagesize = page.getpagesize();
this .pages = page.getpages(); this .list = page; this .size = page.size(); this .total = page.gettotal(); //由于结果是>startrow的,所以实际的需要+1 if ( this .size == 0 ) { this .startrow = 0 ; this .endrow = 0 ; } else { this .startrow = page.getstartrow() + 1 ; //计算实际的endrow(最后一页的时候特殊) this .endrow = this .startrow - 1 + this .size; } } else if (list instanceof collection) { this .pagenum = 1 ; this .pagesize = list.size();
this .pages = this .pagesize > 0 ? 1 : 0 ; this .list = list; this .size = list.size(); this .total = list.size(); this .startrow = 0 ; this .endrow = list.size() > 0 ? list.size() - 1 : 0 ; } if (list instanceof collection) { this .navigatepages = navigatepages; //计算导航页 calcnavigatepagenums(); //计算前后页,第一页,最后一页 calcpage(); //判断页面边界 judgepageboudary(); } }
....... } |
这里只列出所有属性和构造方法,那么可以清晰的看到一些属性的含义,一些属性是如何初始化,并且初始化值是怎样的,更多详细情况可以自己去查看源码,都有中文注释
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
原文链接:https://segmentfault测试数据/a/1190000018200373
查看更多关于MyBatis分页插件PageHelper的具体使用的详细内容...