hibernate分页,还是不错的,不会每次取出的指定的数据个数,不会倒置系统的问题。
下面是具体实现代码:
Dao.
/**
* 分页查询方法
*
* @param informationtypeId
* @param informationtitle
* @param pageSize
* @param startRow
* @return
*/
public List findInfoList(long informationtypeId, String informationtitle,
int pageSize, int startRow) {
final int pageSize1 = pageSize;
final int startRow1 = startRow;
log.debug("attaching clean Information instance");
try {
String sql = "from Information info where info.informationtypeId = ? ";
String sql1 = "from Information info where info.informationtypeId = ? and info.informationtitle like ?";
if (null == informationtitle || "".equals(informationtitle)) {
Query query = getSession().createQuery(sql);
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
query.setLong(0, informationtypeId);
log.debug("attach successful");
return query.list();
} else {
Query query = getSession().createQuery(sql1);
query.setLong(0, informationtypeId);
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
query.setString(1, "%" + informationtitle + "%");
log.debug("attach successful");
return query.list();
}
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}
/**
* 分页用到的获取记录数方法
*
* @param informationtypeId
* @param informationtitle
* @return
*/
public int getRows(long informationtypeId, String informationtitle) {
log.debug("attaching clean Information instance");
try {
String sql = "select count(info.informationId) from Information info where info.informationtypeId = ? ";
String sql1 = "select count(info.informationId) from Information info where info.informationtypeId = ? and info.informationtitle like ?";
if (null == informationtitle || "".equals(informationtitle)) {
Query query = getSession().createQuery(sql);
query.setLong(0, informationtypeId);
log.debug("attach successful");
return Integer.parseInt(query.list().get(0).toString());
} else {
Query query = getSession().createQuery(sql1);
query.setLong(0, informationtypeId);
query.setString(1, "%" + informationtitle + "%");
log.debug("attach successful");
return Integer.parseInt(query.list().get(0).toString());
}
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}
通过service注入到action,实现方法
/**
* 新闻List查询页面,messageList.jsp
*
* @return
* @throws Exception
*/
public String messageList() throws Exception {
// TODO Auto-generated method stub
// this.setInfoTypeList(iMessageManaService.finInfoTypeList());
/*
* this.setInfoList(iMessageManaService.findInfoList(informationtitle,
* Long.parseLong(informationtypeId)));
*/
int totalRow = iMessageManaService.getRows(Long
.parseLong(informationtypeId), informationtitle);
pager = pagerService.getPager(this.getCurrentPage(), this
.getPagerMethod(), totalRow);
this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
this.setTotalRows(String.valueOf(totalRow));
this.setInfoList(iMessageManaService.findInfoList(Long
.parseLong(informationtypeId), informationtitle, pager
.getPageSize(), pager.getStartRow()));
return SUCCESS;
}
显示页面JSP
/**
* 新闻List查询页面,messageList.jsp
*
* @return
* @throws Exception
*/
public String messageList() throws Exception {
// TODO Auto-generated method stub
// this.setInfoTypeList(iMessageManaService.finInfoTypeList());
/*
* this.setInfoList(iMessageManaService.findInfoList(informationtitle,
* Long.parseLong(informationtypeId)));
*/
int totalRow = iMessageManaService.getRows(Long
.parseLong(informationtypeId), informationtitle);
pager = pagerService.getPager(this.getCurrentPage(), this
.getPagerMethod(), totalRow);
this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
this.setTotalRows(String.valueOf(totalRow));
this.setInfoList(iMessageManaService.findInfoList(Long
.parseLong(informationtypeId), informationtitle, pager
.getPageSize(), pager.getStartRow()));
return SUCCESS;
}
Pager类
package com.xmetc.jmu.oldman.sims.common;
/**
* Pager类用于计算首页、前一页、下一页、尾页的在数据库中的起始行,当前的页码
* @author LT
*
*/
public class Pager {
private int totalRows; //总行数
private int pageSize = 5; //每页显示的行数
private int currentPage; //当前页号
private int totalPages; //总页数
private int startRow; //当前页在数据库中的起始行
public Pager() {
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1;
startRow = 0;
}
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
public void next() {
if (currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
}
}
}
PageHelper类
package com.xmetc.jmu.oldman.sims.common;
/**
* Pager类的辅助类
* @author LT
*
*/
public class PageHelper {
public Pager getPager(String currentPage,String pagerMethod,int totalRows) {
// 定义pager对象,用于传到页面
Pager pager = new Pager(totalRows);
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.refresh(Integer.parseInt(currentPage));
}
// 获取当前执行的方法,首页,前一页,后一页,尾页。
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
} else if (pagerMethod.equals("previous")) {
pager.previous();
} else if (pagerMethod.equals("next")) {
pager.next();
} else if (pagerMethod.equals("last")) {
pager.last();
}
}
return pager;
}
}
这样就可以实现HIBERNATE分页,继续学习中~
分享到:
相关推荐
Hibernate分页查询小结
#### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...
此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...
标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...
让我们深入探讨Hibernate分页查询的相关知识点。 一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults...
hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网http://www.datatables.net/,datatables的功能很 全面。 2,建表的sql--studentinfo和插入...
总结起来,"hibernate分页代码"是一个关于如何在Hibernate中进行分页查询的实践示例,适用于在MyEclipse环境下运行。通过Criteria API或HQL,开发者能够方便地实现分页功能,提升应用性能,为用户提供更好的体验。...
在"Struts + Hibernate 分页实现"这个项目中,重点在于如何在Web应用中整合这两个框架,并实现数据的分页显示。分页是大型数据集处理时常见的需求,它能够帮助用户更有效地浏览和管理大量信息,避免一次性加载所有...
本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...
在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...
1. **配置Hibernate分页**: 在Hibernate中,我们通常使用`Criteria`或`Query` API进行分页查询。`Criteria`提供了一种更面向对象的方式来执行SQL查询,而`Query` API则对应于原生的SQL语句。在这些API中,我们可以...
hibernate分页 博文链接:https://iomo.iteye.com/blog/243518
本篇主要围绕"Hibernate分页查询效果"这一主题,深入探讨如何利用Hibernate框架实现高效、便捷的分页功能。 首先,Hibernate是一个优秀的Java持久化框架,它提供了ORM(对象关系映射)解决方案,使得开发者可以使用...
**hibernate分页**是Java开发中一个重要的技术概念,特别是在处理大数据量时,为了提高用户体验和系统性能,分页查询是不可或缺的。Hibernate,作为一款强大的对象关系映射(ORM)框架,提供了多种实现分页查询的...
这个"高效率的dw+spring+hibernate分页演示例子"提供了一个实用的示例,展示了如何将这三个框架整合起来,以实现高效的数据分页功能。 首先,让我们来逐一了解这三个技术: 1. **DWR (Direct Web Remoting)**:DWR...
### Hibernate分页基础 1. **Criteria API**:Hibernate的Criteria API允许我们创建动态查询,同时也支持分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以实现分页效果。例如: ```java Criteria ...
综上所述,"struts+hibernate分页"涉及到的主要是如何在Struts的控制层和Hibernate的数据层之间协调处理分页请求,以及在DAO层利用Hibernate的特性实现数据库查询的分页。理解并掌握这两个框架的分页机制,对于开发...
java 实现的一个简单的hibernate分页类 可以设置,从某一条开始取、显示的条数 不依赖struts spring
本教程将通过一个具体的“hibernate分页例子”来深入理解如何在Hibernate中实现分页功能。 在实际应用中,当数据量大到一定程度时,一次性加载所有数据会导致内存压力过大,影响系统性能。因此,分页查询成为一种...
本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...