文档章节

Hibernate 分页技术

passionfly
 passionfly
发布于 2015/02/23 00:50
字数 834
阅读 15
收藏 1
点赞 0
评论 0

先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可

先上代码:注意传进来的参数有 Page这类,后面有介绍

  1. public List<Article> queryByPage(final String username, final Page page) {  

  2.         return this.getHibernateTemplate().executeFind(new HibernateCallback() {  

  3.             public Object doInHibernate(Session session)  

  4.                     throws HibernateException, SQLException {  

  5.                 Query query = session.createQuery("select art from Article art where art.username = ?");  

  6.                 //设置参数  

  7.                 query.setParameter(0, username);  

  8.                 //设置每页显示多少个,设置多大结果。  

  9.                 query.setMaxResults(page.getEveryPage());  

  10.                 //设置起点  

  11.                 query.setFirstResult(page.getBeginIndex());  

  12.                 return query.list();  

  13.             }  

  14.         });  


上面关键代码是 setMaxResults(),和setFirstResult(),即设置最大显示值和起点

这里我们需要一个Page工具类,用来操作分页。

Page.java

[java] view plaincopy

  1. package com.fenye;  

  2.   

  3. public class Page {  

  4.     // 1.每页显示数量(everyPage)  

  5.     private int everyPage;  

  6.     // 2.总记录数(totalCount)  

  7.     private int totalCount;  

  8.     // 3.总页数(totalPage)  

  9.     private int totalPage;  

  10.     // 4.当前页(currentPage)  

  11.     private int currentPage;  

  12.     // 5.起始点(beginIndex)  

  13.     private int beginIndex;  

  14.     // 6.是否有上一页(hasPrePage)  

  15.     private boolean hasPrePage;  

  16.     // 7.是否有下一页(hasNextPage)  

  17.     private boolean hasNextPage;  

  18.   

  19.     public Page(int everyPage, int totalCount, int totalPage, int currentPage,  

  20.             int beginIndex, boolean hasPrePage, boolean hasNextPage) {  

  21.         this.everyPage = everyPage;  

  22.         this.totalCount = totalCount;  

  23.         this.totalPage = totalPage;  

  24.         this.currentPage = currentPage;  

  25.         this.beginIndex = beginIndex;  

  26.         this.hasPrePage = hasPrePage;  

  27.         this.hasNextPage = hasNextPage;  

  28.     }  

  29.   

  30.     //构造函数,默认  

  31.     public Page(){}  

  32.       

  33.     //构造方法,对所有属性进行设置  

  34.       

  35.       

  36.     public int getEveryPage() {  

  37.         return everyPage;  

  38.     }  

  39.   

  40.     public void setEveryPage(int everyPage) {  

  41.         this.everyPage = everyPage;  

  42.     }  

  43.   

  44.     public int getTotalCount() {  

  45.         return totalCount;  

  46.     }  

  47.   

  48.     public void setTotalCount(int totalCount) {  

  49.         this.totalCount = totalCount;  

  50.     }  

  51.   

  52.     public int getTotalPage() {  

  53.         return totalPage;  

  54.     }  

  55.   

  56.     public void setTotalPage(int totalPage) {  

  57.         this.totalPage = totalPage;  

  58.     }  

  59.   

  60.     public int getCurrentPage() {  

  61.         return currentPage;  

  62.     }  

  63.   

  64.     public void setCurrentPage(int currentPage) {  

  65.         this.currentPage = currentPage;  

  66.     }  

  67.   

  68.     public int getBeginIndex() {  

  69.         return beginIndex;  

  70.     }  

  71.   

  72.     public void setBeginIndex(int beginIndex) {  

  73.         this.beginIndex = beginIndex;  

  74.     }  

  75.   

  76.     public boolean isHasPrePage() {  

  77.         return hasPrePage;  

  78.     }  

  79.   

  80.     public void setHasPrePage(boolean hasPrePage) {  

  81.         this.hasPrePage = hasPrePage;  

  82.     }  

  83.   

  84.     public boolean isHasNextPage() {  

  85.         return hasNextPage;  

  86.     }  

  87.   

  88.     public void setHasNextPage(boolean hasNextPage) {  

  89.         this.hasNextPage = hasNextPage;  

  90.     }  

  91.   

  92. }  

Page工具类主要是封装页面信息,一共多少数据啊,一页显示多少啊,起点的序号,总页数,是否有上一页下一页,当前页。

还需要一个操作page的工具类,PageUtil.java

[javascript] view plaincopy

  1. package com.sanqing.fenye;  

  2. /* 

  3.  * 分页信息辅助类 

  4.  */  

  5. public class PageUtil {  

  6.       

  7.     public static Page createPage(int everyPage,int totalCount,int currentPage) {  

  8.         everyPage = getEveryPage(everyPage);  

  9.         currentPage = getCurrentPage(currentPage);  

  10.         int totalPage = getTotalPage(everyPage, totalCount);  

  11.         int beginIndex = getBeginIndex(everyPage, currentPage);  

  12.         boolean hasPrePage = getHasPrePage(currentPage);  

  13.         boolean hasNextPage = getHasNextPage(totalPage, currentPage);  

  14.         return new Page(everyPage, totalCount, totalPage, currentPage,  

  15.                 beginIndex, hasPrePage,  hasNextPage);  

  16.     }  

  17.       

  18.     public static Page createPage(Page page,int totalCount) {  

  19.         int everyPage = getEveryPage(page.getEveryPage());  

  20.         int currentPage = getCurrentPage(page.getCurrentPage());  

  21.         int totalPage = getTotalPage(everyPage, totalCount);  

  22.         int beginIndex = getBeginIndex(everyPage, currentPage);  

  23.         boolean hasPrePage = getHasPrePage(currentPage);  

  24.         boolean hasNextPage = getHasNextPage(totalPage, currentPage);  

  25.         return new Page(everyPage, totalCount, totalPage, currentPage,  

  26.                 beginIndex, hasPrePage,  hasNextPage);  

  27.     }  

  28.       

  29.     //设置每页显示记录数  

  30.     public static int getEveryPage(int everyPage) {  

  31.         return everyPage == 0 ? 10 : everyPage;  

  32.     }  

  33.       

  34.     //设置当前页  

  35.     public static int getCurrentPage(int currentPage) {  

  36.         return currentPage == 0 ? 1 : currentPage;  

  37.     }  

  38.       

  39.     //设置总页数,需要总记录数,每页显示多少  

  40.     public static int getTotalPage(int everyPage,int totalCount) {  

  41.         int totalPage = 0;  

  42.         if(totalCount % everyPage == 0) {  

  43.             totalPage = totalCount / everyPage;  

  44.         } else {  

  45.             totalPage = totalCount / everyPage + 1;  

  46.         }  

  47.         return totalPage;  

  48.     }  

  49.       

  50.     //设置起始点,需要每页显示多少,当前页  

  51.     public static int getBeginIndex(int everyPage,int currentPage) {  

  52.         return (currentPage - 1) * everyPage;  

  53.     }  

  54.       

  55.     //设置是否有上一页,需要当前页  

  56.     public static boolean getHasPrePage(int currentPage) {  

  57.         return currentPage == 1 ? false : true;  

  58.     }  

  59.       

  60.     //设置是否有下一个,需要总页数和当前页  

  61.     public static boolean getHasNextPage(int totalPage, int currentPage) {  

  62.         return currentPage == totalPage || totalPage == 0 ? false : true;  

  63.     }  

  64.       

  65. }  

创建Page只需要3个参数,每页显示多少数据,当前页,总共多少数据,其他的4个参数都可以通过这三个计算出来

所以后面要创建Page,只需要调用这工具方法PageUtil.createPage(3个参数),就返回一Page.

返回的Page就是前面参数的Page,即要显示的分页

这样就算完成了分页的功能。


本文转载自:http://blog.csdn.net/beyond667/article/details/7385332

共有 人打赏支持
passionfly
粉丝 13
博文 106
码字总数 76465
作品 0
西安
数据分页资料汇总

1.数据库分页Java实现(http://www.cnblogs.com/ITtangtang/archive/2012/04/21/2462385.html) 2.Java分页代码的实现(http://www.open-open.com/lib/view/open1346772322162.html) 3. java分页......

IT追寻者
2016/08/13
41
0
Hibernate实现分页查询的简要分析

本文向大家介绍Hibernate查询分页,可能好多人还不了解Hibernate查询分页,没有关系,下面有一个例子,从第2万条开始取出100条记录看完本文你肯定有不少收获,希望本文能教会你更多东西。 Ja...

xiangtao
2012/08/31
0
2
baomidou/hibernate-plus

为简化开发工作、提高生产率而生 简介 | Intro Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层操作 技术讨论 QQ 群 492238239 如满,加群 121472998 (有钱的捧个钱场【点击捐赠】...

baomidou
2016/12/05
0
0
Spring Boot总结(5)---数据访问

数据访问是开发中必不可少的模块,Spring Data 是 Spring 用于解决数据访问问题的一揽字解决方案。 Spring Data 使用统一的API对 各种数据库存储技术 提供数据访问操作支持。 Spring Data Co...

weberweber
2017/09/08
0
0
baomidou/mybatisplus-spring-boot-starter

#mybatisplus-spring-boot-starter mybatisplus-spring-boot-starter 为 Mybatis-Plus 快速集成 spring-boot 简化配置而生,不再需拿 MyBatis 和 Hibernate 相比,mybatis-plus 作为 mybati......

baomidou
2017/05/05
0
0
Minidao_1.6.2 发布,超轻量 Java 持久化框架

Minidao1.6.2 版本发布了,超轻量Java持久化框架 升级日志 1,扩展新标签@param 2,支持拦截器 Interceptor 3,提高分页效率,SqlServer兼容问题处理 4,升级spring4 Minidao 简介 MiniDao ...

Jeecg
2017/08/18
748
2
简单实现ibatis的物理分页

本文是原创文章,转载请注明出处:http://my.oschina.net/fqt/blog/52431 一直以来ibatis的分页都是通过滚动ResultSet实现的,应该算是逻辑分页吧。逻辑分页虽然能很干净地独立于特定数据库,...

微凉的风
2012/04/05
0
12
Hibernate-Plus 发布 1.0.0.Final

简介 | Intro Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作 优点 | Advantages 纯正血统:完全继承原生 Hibernate 的所有特性 最少依赖:仅仅依赖 Hibernate 自动生成代...

青苗
2016/12/06
2.4K
10
基于Spring的JdbcTemplate和Hibernate产生的BaseDao(一)

最近在看各种持久层 发现每一个框架提供的关于JDBC的封装都有限 我就按照易于扩展、灵活、简单方便的思路写了一个关于数据库持久层的操作 BaseDao 思路是这样的: BaseDao要有如下的功能 1 ...

deepler
2012/12/16
0
6
Hibernate 增强工具包--Hibernate-Plus

简介 | Intro Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作 优点 | Advantages 纯正血统:完全继承原生 Hibernate 的所有特性 最少依赖:仅仅依赖 Hibernate 自动生成代...

青苗
2016/12/06
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java基础——异常

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 异常处理: 可以挖很多个陷阱,但是不要都是一样...

凯哥学堂
29分钟前
0
0
180723-Quick-Task 动态脚本支持框架之结构设计篇

文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/ Quick-Task 动态脚本支持框架之结构设计篇 相关博文: 180702-QuickTask动态脚本...

小灰灰Blog
32分钟前
0
0
SBT 常用开发技巧

SBT 一直以来都是 Scala 开发者不可言说的痛,最主要的原因就是官方文档维护质量较差,没有经过系统的、循序渐进式的整理,导致初学者入门门槛较高。虽然也有其它构建工具可以选择(例如 Mill...

joymufeng
36分钟前
0
0
HBase in Practice - 性能、监控及问题解决

李钰(社区ID:Yu Li),阿里巴巴计算平台事业部高级技术专家,HBase开源社区PMC&committer。开源技术爱好者,主要关注分布式系统设计、大数据基础平台建设等领域。连续4年基于HBase/HDFS设计和...

中国HBase技术社区
37分钟前
1
0
ES18-JAVA API 批量操作

1.批量查询 Multi Get API public static void multiGet() {// 批量查询MultiGetResponse response = getClient().prepareMultiGet().add("my_person", "my_index", "1")// 查......

贾峰uk
42分钟前
0
0
SpringBoot2.0使用health

1,引入actuator <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> 2,application.properties ......

暗中观察
49分钟前
0
0
阿里巴巴Java开发规约

###编程规约 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。...

简心
53分钟前
0
0
如何用TypeScript来创建一个简单的Web应用

转载地址 如何用TypeScript来创建一个简单的Web应用 安装TypeScript 获取TypeScript工具的方式: 通过npm(Node.js包管理器) npm install -g typescript 构建你的第一个TypeScript文件 创建...

durban
58分钟前
0
0
分享好友,朋友圈自定义分享链接无效

这个问题是微信6.5.6版本以后,修改了分享规则:分享的连接必须在公众号后台设定的js安全域名内

LM_Mike
今天
0
0
2018年7月23日课程

一、LVS-DR介绍 director分配请求到不同的real server。real server 处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了...

人在艹木中
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部