public class Pager {
private int rows; //总行数
private int pages; //总页数
private int currentPages; //当前页
private int maxResults; //当前显示的行数
private int firstResults; //当前页的首记录
private int currentResults; //当前页的末记录
private int endPages; //当前页显示的最后页数
private int startPages; //当前页显示的起始页数
public Pager() {
}
/**
*
* @param _totalRows 总记录数
* @param _pageSize 每页显示的行数
* @param _pageShow 要显示的页数
* @param _currentPage 当前页
*/
public Pager(int _totalRows, int _pageSize, int _pageShow, int _currentPage) {
rows = _totalRows; //查询的总记录数
maxResults = _pageSize;
currentPages = _currentPage;
if(rows==0){ //总记录数为零将所有的记录都赋为零
pages = 0; //总页数
maxResults = 0; //每页显示的行数
currentPages = 0; //当前页
firstResults = 0; //当前页的首记录
currentResults = 0; //当前页的末记录
}else{
pages = rows/_pageSize; //总记录/每页要显示的记录=总页数
int mod = rows%_pageSize; //总记录和每页要显示的记录求余结果大于0总页数加1
if(mod>0){
pages++;
}
firstResults = 1; //设置当前第一条记录为零
}
if(pages<_pageShow && pages>=1) { //如果总页数小于显示的页数
endPages = pages; //则: 要显示的页数=总页数
startPages = 1; //则:当前起始页为1
endPages = _pageShow;
}else if(pages>_pageShow){ //如果总页数大于显示的页数
if(currentPages-_pageShow/2<1) { //如果当前页-显示页数/2<1
endPages = _pageShow; //则:这个页最后显示的页数为 _pageShow
startPages = 1; //则:起始页为1
}else if (currentPages+_pageShow/2>pages){ //如果当前页+显示页数/2<pages
endPages = pages; //则:显示的页数为 pages
startPages = pages-_pageShow+1; //则:起始页为pages-_pageShow
}else{
endPages = currentPages+_pageShow/2; //显示的页数
startPages = currentPages-_pageShow/2+1; //起始页
}
}else if(pages==_pageShow){
if(currentPages-_pageShow/2<1) { //如果当前页-显示页数/2<1
endPages = _pageShow; //则:这个页最后显示的页数为 _pageShow
startPages = 1; //则:起始页为1
}else if (currentPages+_pageShow/2>pages){ //如果当前页+显示页数/2<pages
endPages = pages; //则:显示的页数为 pages
startPages = pages-_pageShow+1; //则:起始页为pages-_pageShow
}else{
endPages = currentPages+_pageShow/2; //显示的页数
startPages = currentPages-_pageShow/2+1; //起始页
}
}else{
System.out.println("错误");
endPages = 0; //显示的页
currentPages = 0; //当前页
startPages = 0; //起始页
}
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getCurrentPages() {
return currentPages;
}
public void setCurrentPages(int currentPages) {
this.currentPages = currentPages;
}
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
public int getFirstResults() {
return firstResults;
}
public void setFirstResults(int firstResults) {
this.firstResults = firstResults;
}
public int getCurrentResults() {
return currentResults;
}
public void setCurrentResults(int currentResults) {
this.currentResults = currentResults;
}
public int getEndPages() {
return endPages;
}
public void setEndPages(int endPages) {
this.endPages = endPages;
}
public int getStartPages() {
return startPages;
}
public void setStartPages(int startPages) {
this.startPages = startPages;
}
public void first(){
currentPages = 1; //当前页为1
firstResults = 1; //首记录为1
if(rows/maxResults >1) { //总行数/每页显示的最大结果数大于1
currentResults = maxResults; //当前页的麽记录=每页显示的最大结果数
} else { //总行数/每页显示的最大结果数小于1
currentResults = rows%maxResults; //当前页的麽记录=总行数/每页要显示最大结果的余数
}
}
public void last(){
firstResults = (pages-1)*maxResults; //当前页的首记录=总页数减一乘以每页要显示的最大结果数
currentPages = pages; //当前页就等于总页数
currentResults = rows; //当前页的麽记录=总行数
}
public void next(){
if(currentPages==pages){
this.last();
}else{
currentPages = currentPages + 1; //当前页加1
firstResults = (currentPages - 1) * maxResults +1; //当前页的首记录 = 上一页的首记录+每页显示的最大结果
if(pages > currentPages) { //如果总页数大于当前页
currentResults = firstResults + maxResults - 1; //当前页的麽记录 = 当前页的首记录+每页显示的最大结果
} else { //负责
if(rows%maxResults==0) {
currentResults = rows; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResults = firstResults + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}
}
public void before(){
if(currentPages==1){
this.first();
}else{
currentResults = (currentPages - 1) * maxResults-1; //当前页的麽记录 = 上一页的首记录
firstResults = currentResults - maxResults; //当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
currentPages--;
}
}
public void changePage(){
firstResults = (currentPages-1)*maxResults+1; //当前页的首记录 = (当前页-1)*每要显示的最大结果数
if(pages > currentPages) { //如果总页数大于当前页
currentResults = firstResults + maxResults-1; //当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
} else {
if(rows%maxResults==0) {
currentResults = firstResults+maxResults-1; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResults = firstResults + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}
public void refresh(int _currentPage){
currentPages = _currentPage;
if (currentPages > pages) {
last();
}
}
}
public class HelpPager {
/**
*
* @此方法描述的是:分页查询
* @param request
* @param _totalRows 总记录数
* @param _pageSize 每页显示多少条
* @param _pageShow 要显示的多少页
* @return
* Pager
*/
public static Pager getPager(HttpServletRequest request,
int _totalRows, int _pageSize, int _pageShow) {
//定义pager对象,用于传到页面
int _currentPage = 1;
String currentPage = request.getParameter("currentPages");
if(null!=currentPage && !"".equals(currentPage)){
_currentPage = Integer.valueOf(currentPage);
}
Pager pager = new Pager(_totalRows, _pageSize, _pageShow, _currentPage);
//从Request对象中获取当前页号
//如果当前页号为空,表示为首次查询该页
//如果不为空,则刷新pager对象,输入当前页号等信息
// if (currentPage != null) {
// pager.refresh(Integer.parseInt(currentPage));
// }
//获取当前执行的方法,首页,前一页,后一页,尾页。
String pagerMethod = request.getParameter("pageFlag");
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
} else if (pagerMethod.equals("last")) {
pager.last();
} else if (pagerMethod.equals("next")) {
pager.next();
} else if (pagerMethod.equals("before")) {
pager.before();
} else if(pagerMethod.equals("changePage")){
pager.changePage();
}
}else{
pager.refresh(_currentPage);
}
return pager;
}
}
public class OrderAction extends BaseAction{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("查询翻译清单");
ITrOrder iTrOrder = (ITrOrder) BeanHelp.getBean("iTrOrder");
Date date = null;
int n = iTrOrder.getHoTranslateOrderRow("one", "two", date, "four", "five", "six");
Pager pager = HelpPager.getPager(request, n, 2, 2);
List list = iTrOrder.getHoTranslateOrderList(2, pager.getFirstResults(), "one", "two", date, "four", "five", "six");
request.setAttribute("list", list);
request.setAttribute("pager", pager);
return mapping.findForward("back");
}
}
jsp:
<div class="page">
每页<span class="color_red">30</span>条/共<span class="color_red">${pager.rows}</span class="color_red">条
第<span class="color_red">${pager.currentPages}</span>页/共<span>${pager.pages}</span>页
<!--
<a href="#">【首页】</a>
<a href="#">【上页】</a>
<a href="#">【下页】</a>
<a href="#">【末页】</a>
-->
<html:link action="/bid.do?pageFlag=first" paramName="pager" paramProperty="currentPages" paramId="currentPages">【首页】</html:link>
<html:link action="/bid.do?pageFlag=before" paramName="pager" paramProperty="currentPages" paramId="currentPages">【上页】</html:link>
<html:link action="/bid.do?pageFlag=next" paramName="pager" paramProperty="currentPages" paramId="currentPages">【下页】</html:link>
<html:link action="/bid.do?pageFlag=last" paramName="pager" paramProperty="currentPages" paramId="currentPages">【末页】</html:link>
转到 <input type="text" class="txt" id="jp" value="${pager.currentPages}"/> 页 <input type="button" value="GO" onclick="jumppage()"/> </div>
<script type="text/javascript">
var path = "";
var ua = navigator.userAgent.split(";");
if(ua[2].indexOf("Windows")!=-1) {
path = "/soho/";
}else {
path = "http://soho.hereonline.com/";
}
function jumppage(){
var jp = document.getElementById("jp").value;
if(jp>${pager.pages}){
alert("超出页数范围");
return false;
}
if(jp<1){
alert("超出页数范围");
return false;
}
window.location=path+"bid.do?pageFlag=changePage¤tPages="+jp;
}
</script>
</div>
DAO and Service:
/**
*
* @此方法描述的是:查询 记录
* @param maxResults
* @param startResult
* @param one
* @param two
* @param three
* @param four
* @param five
* @param six
* @return
* List
*/
public List getHoTranslateOrderList(int maxResults, int startResult, String one,
String two, Date three, String four, String five, String six);
public List getHoTranslateOrderList(int maxResults, int startResult, String one,
String two, Date three, String four, String five, String six) {
String SQL = "select * from HereOnLine.HO_TranslateOrder ho";
return queryBySQL(SQL, HoTranslateOrder.class, maxResults, startResult);
}
/**
*
* @此方法描述的是:查询一共多少条记录
* @param one
* @param two
* @param three
* @param four
* @param five
* @param six
* @return
* int
*/
public int getHoTranslateOrderRow(String one, String two, Date there, String four, String five, String six);
public int getHoTranslateOrderRow(String one, String two, Date three,
String four, String five, String six) {
String SQL = "select count(*) from HO_TranslateOrder ho";
return queryBySQLRows(SQL);
}
Hibernate:
public List queryBySQL(String SQL, Class EntityClass, int maxResults, int startResults, Date startDate, Date endDate) {
Session session = this.getHibernateSession();
try {
return session.createSQLQuery(SQL).addEntity(EntityClass)
.setFirstResult(startResults-1)
.setMaxResults(maxResults)
.setDate(0, startDate)
.setDate(2, endDate)
.list();
} catch (HibernateException e) {
e.printStackTrace();
return null;
}finally{
session.close();
}
}
public int queryBySQLRows(String SQL){
Session session = this.getHibernateSession();
try {
return Integer.valueOf(((session.createSQLQuery(SQL).list().get(0))).toString());
} catch (Exception e) {
e.printStackTrace();
return 0;
}finally{
session.close();
}
}
分享到:
相关推荐
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提供了一种方便的方式来处理分页查询,通过...