1、 hirbernate 自带分页
eg:Query q = sess.createQuery("from XXX");
q.setFirstResult(20);设置起始行
q.setMaxResults(10);每页条数
List cats = q.list(); //得到每页的数据封装到一个方法里面
每次点击下一页的时候,根据计算传入不同的 参数 a(起始页) ,b(每页显示数量),实现分页功能
q.setFirstResult(a);设置起始行
q.setMaxResults(b);每页条数
2、mybatis 分页需要myslq limit 函数(效率低,成本高)、或者配置分页插件PageHelper 从而实现分页
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
<property name="dialect" value="mysql"/> //数据库方言
<property name="offsetAsPageNum" value="false"/>
<property name="rowBoundsWithCount" value="false"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="supportMethodsArguments" value="false"/>
<property name="returnPageInfo" value="none"/>
</plugin>
Page page = PageHelper.startPage(pageNum, pageSize, true); // 在查询list 之前使用pageHepler的分页,就可以实现分页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//第一页
private int firstPage;
//前一页
private int prePage;
//下一页
private int nextPage;
//最后一页
private int lastPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
使用PageInfo这个类,你只需要将查询出来的list放进去:
PageInfo<UserInfo> p = new PageInfo<UserInfo>(list);
然后将 p 对象放入域对象中,前台通过el 表达式取出来相关属性值就可以啦
比如${page.nextPage}翻到下一页,
至于PageHelper的其他API,可以自行查找。。。。。。
eg:Query q = sess.createQuery("from XXX");
q.setFirstResult(20);设置起始行
q.setMaxResults(10);每页条数
List cats = q.list(); //得到每页的数据封装到一个方法里面
每次点击下一页的时候,根据计算传入不同的 参数 a(起始页) ,b(每页显示数量),实现分页功能
q.setFirstResult(a);设置起始行
q.setMaxResults(b);每页条数
2、mybatis 分页需要myslq limit 函数(效率低,成本高)、或者配置分页插件PageHelper 从而实现分页
mysql :SELECT * FROM student LIMIT (PageNo - 1) * PageSize,PageSize;
重点讲PageHelper 这个插件的使用。。。
PageHelper的优点是,分页和Mapper.xml完全解耦。实现方式是以插件的形式,对Mybatis执行的流程进行了强化,添加了总数count和limit查询。属于物理分页。
eg:maven项目中 分页插件PageHelper 使用步骤:
① 引入 pagehelper POM依赖
<dependency><groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
</dependency>
②mybatis对PageHelper的配置
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper"><property name="dialect" value="mysql"/> //数据库方言
<property name="offsetAsPageNum" value="false"/>
<property name="rowBoundsWithCount" value="false"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="supportMethodsArguments" value="false"/>
<property name="returnPageInfo" value="none"/>
</plugin>
</plugins>
③ 分页实现
不需要写分页的sql,只需要一条查询所有数据的sqlPage page = PageHelper.startPage(pageNum, pageSize, true); // 在查询list 之前使用pageHepler的分页,就可以实现分页
List<UserInfo> list =userService.getUserList(); //查询所有的用户
eg:Page page = PageHelper.startPage(1, 10, true); //表示显示第一页,10条数据,true表示需要统计总数
当我们分页查询出来了,就需要分页的数据显示在前台页面,这时候需要插件提供的一个PageInfo类,这个类有以下属性:
//当前页private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//第一页
private int firstPage;
//前一页
private int prePage;
//下一页
private int nextPage;
//最后一页
private int lastPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
使用PageInfo这个类,你只需要将查询出来的list放进去:
PageInfo<UserInfo> p = new PageInfo<UserInfo>(list);
然后将 p 对象放入域对象中,前台通过el 表达式取出来相关属性值就可以啦
比如${page.nextPage}翻到下一页,
至于PageHelper的其他API,可以自行查找。。。。。。