转自:http://blog.csdn.net/beyond667/article/details/7385332
先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可
先上代码:注意传进来的参数有 Page这类,后面有介绍
- public List<Article> queryByPage(final String username, final Page page) {
- return this.getHibernateTemplate().executeFind(new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException {
- Query query = session.createQuery("select art from Article art where art.username = ?");
- //设置参数
- query.setParameter(0, username);
- //设置每页显示多少个,设置多大结果。
- query.setMaxResults(page.getEveryPage());
- //设置起点
- query.setFirstResult(page.getBeginIndex());
- return query.list();
- }
- });
上面关键代码是 setMaxResults(),和setFirstResult(),即设置最大显示值和起点
这里我们需要一个Page工具类,用来操作分页。
Page.java
- package com.fenye;
- public class Page {
- // 1.每页显示数量(everyPage)
- private int everyPage;
- // 2.总记录数(totalCount)
- private int totalCount;
- // 3.总页数(totalPage)
- private int totalPage;
- // 4.当前页(currentPage)
- private int currentPage;
- // 5.起始点(beginIndex)
- private int beginIndex;
- // 6.是否有上一页(hasPrePage)
- private boolean hasPrePage;
- // 7.是否有下一页(hasNextPage)
- private boolean hasNextPage;
- public Page(int everyPage, int totalCount, int totalPage, int currentPage,
- int beginIndex, boolean hasPrePage, boolean hasNextPage) {
- this.everyPage = everyPage;
- this.totalCount = totalCount;
- this.totalPage = totalPage;
- this.currentPage = currentPage;
- this.beginIndex = beginIndex;
- this.hasPrePage = hasPrePage;
- this.hasNextPage = hasNextPage;
- }
- //构造函数,默认
- public Page(){}
- //构造方法,对所有属性进行设置
- public int getEveryPage() {
- return everyPage;
- }
- public void setEveryPage(int everyPage) {
- this.everyPage = everyPage;
- }
- public int getTotalCount() {
- return totalCount;
- }
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
- public int getTotalPage() {
- return totalPage;
- }
- public void setTotalPage(int totalPage) {
- this.totalPage = totalPage;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public void setCurrentPage(int currentPage) {
- this.currentPage = currentPage;
- }
- public int getBeginIndex() {
- return beginIndex;
- }
- public void setBeginIndex(int beginIndex) {
- this.beginIndex = beginIndex;
- }
- public boolean isHasPrePage() {
- return hasPrePage;
- }
- public void setHasPrePage(boolean hasPrePage) {
- this.hasPrePage = hasPrePage;
- }
- public boolean isHasNextPage() {
- return hasNextPage;
- }
- public void setHasNextPage(boolean hasNextPage) {
- this.hasNextPage = hasNextPage;
- }
- }
Page工具类主要是封装页面信息,一共多少数据啊,一页显示多少啊,起点的序号,总页数,是否有上一页下一页,当前页。
还需要一个操作page的工具类,PageUtil.java
- package com.sanqing.fenye;
- /*
- * 分页信息辅助类
- */
- public class PageUtil {
- public static Page createPage(int everyPage,int totalCount,int currentPage) {
- everyPage = getEveryPage(everyPage);
- currentPage = getCurrentPage(currentPage);
- int totalPage = getTotalPage(everyPage, totalCount);
- int beginIndex = getBeginIndex(everyPage, currentPage);
- boolean hasPrePage = getHasPrePage(currentPage);
- boolean hasNextPage = getHasNextPage(totalPage, currentPage);
- return new Page(everyPage, totalCount, totalPage, currentPage,
- beginIndex, hasPrePage, hasNextPage);
- }
- public static Page createPage(Page page,int totalCount) {
- int everyPage = getEveryPage(page.getEveryPage());
- int currentPage = getCurrentPage(page.getCurrentPage());
- int totalPage = getTotalPage(everyPage, totalCount);
- int beginIndex = getBeginIndex(everyPage, currentPage);
- boolean hasPrePage = getHasPrePage(currentPage);
- boolean hasNextPage = getHasNextPage(totalPage, currentPage);
- return new Page(everyPage, totalCount, totalPage, currentPage,
- beginIndex, hasPrePage, hasNextPage);
- }
- //设置每页显示记录数
- public static int getEveryPage(int everyPage) {
- return everyPage == 0 ? 10 : everyPage;
- }
- //设置当前页
- public static int getCurrentPage(int currentPage) {
- return currentPage == 0 ? 1 : currentPage;
- }
- //设置总页数,需要总记录数,每页显示多少
- public static int getTotalPage(int everyPage,int totalCount) {
- int totalPage = 0;
- if(totalCount % everyPage == 0) {
- totalPage = totalCount / everyPage;
- } else {
- totalPage = totalCount / everyPage + 1;
- }
- return totalPage;
- }
- //设置起始点,需要每页显示多少,当前页
- public static int getBeginIndex(int everyPage,int currentPage) {
- return (currentPage - 1) * everyPage;
- }
- //设置是否有上一页,需要当前页
- public static boolean getHasPrePage(int currentPage) {
- return currentPage == 1 ? false : true;
- }
- //设置是否有下一个,需要总页数和当前页
- public static boolean getHasNextPage(int totalPage, int currentPage) {
- return currentPage == totalPage || totalPage == 0 ? false : true;
- }
- }
创建Page只需要3个参数,每页显示多少数据,当前页,总共多少数据,其他的4个参数都可以通过这三个计算出来
所以后面要创建Page,只需要调用这工具方法PageUtil.createPage(3个参数),就返回一Page.
返回的Page就是前面参数的Page,即要显示的分页
这样就算完成了分页的功能。
相关推荐
主要介绍了基于hibernate实现的分页技术,结合实例形式分析了Hibernate分页技术的原理,实现步骤与相关实现技巧,需要的朋友可以参考下
基于SSH(Struts2、Spring与Hibernate)框架的学生成绩管理系统 (1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩管理”...+ 掌握分页技术
(5) 实现分页功能 目的: 掌握Struts2的开发步骤 掌握Hibernate的开发步骤 掌握Spring的开发步骤,理解依赖注入、AOP、事务管理等 掌握Struts2、Spring和Hibernate框架的整合 掌握分页技术 1.3 实验思路: 1、 ...
这是一个简单的BBS论坛系统,实现了后台的管理和前台的浏览。基于Mysql数据库的。实现了分页技术,可以做个简单的参考。
Spring Data JPA的底层是基于Hibernate的,其JpaRepository、PageAndSortingRepository、CrudRepository等组件能够实现快速单表读取与后端分页、排序等功能,所以其便捷性很适合单体式系统的开发。 * 权限管理使用...
虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多...
虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多...
Spring Data JPA的底层是基于Hibernate的,其JpaRepository、PageAndSortingRepository、CrudRepository等组件能够实现快速单表读取与后端分页、排序等功能,所以其便捷性很适合单体式系统的开发。 * 权限管理使用...
虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多...
华智经纬CMS是一套基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点,支持mysql、oracle、sqlserver等数据库。强大、灵活的标签,用户自定义显示内容和显示方式完全生成全站静态页面,可自定义...
的代码就可以实现分页,在以后的项目开发中可以直接使用。 4,在一些页面中还用到了Ajax技术,例如验证码和验证登录名是否已经注册的实现,这样可以不打断用户的操作, 用户体验好且效率高。 5,在对一些格式验证时...
后台采用技术: struts 2 + Spring + Hibernate (SSH2) 前台技术: jquery + easyui框架 所有的数据提交和查询都是通过ajax方式异步传输! 图书数据的添加和查询都是在这个js文件中实现 实现语言是javascript ...
包含有完整的jar包和源代码,这是专门为我们实验室定制开发的,包含了架构基于s2sh技术网站的参考实现(包括了全部基础部分:如分页,缓存,文件上传,连接池等等)希望对初学JavaEE WEB开的人有所帮助。...
本项目是一个基于Struts、Hibernate和Spring框架的Java JSP博客系统,旨在提供一个功能完善、易于扩展和定制的网络日志发布平台。项目实现了用户注册、登录、文章发布、评论、分类管理、标签管理、搜索、分页浏览等...
ssh+bootstrap实现用户管理,其功能包括:hibernate实现数据的增删改查,验证码,项目访问路径拦截器,bootstrap的使用,数据分页,以及查询之后的分页。源码下载后,将hibernate.cfg.xml中的用户名以及密码改变,...
在这个思想的指导下,结合当前流行的框架与技术,开发实现了一个面向项目的集成框架,命名为IOIF。IOIF避免了对某个项目的依赖,使之成为一个主流B/S与C/S项目通用的框架。IOIF的提出是为了避免每个项目重新考虑与...
第5章 hibernate 3持久化技术实践与性能优化 271 5.1 操作持久化对象的常用方法介绍 271 5.1.1 使用session的begintransaction()方法 272 5.1.2 使用session的close()方法 273 5.1.3 使用session的connection()...
虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多...
通过Struts2、Hibernate、spring框架整合做的一个CRM系统,整体开发比较简单,就是细节的地方处理还是要花费...涉及的技术要点就是通过HQL来进行数据的增删改查、部门-职务级联、分页、通过struts进行文件上传下载等。