首先在Action类定义当前页的值

private Integer currPage = 1
setter,getter

在spring IOC容器进行注入该变量

在Action类写一个findAll方法,里面有个findByPage()方法

Service层实现:

//分页查询部分方法
public PageBean<Department> findByPage(Integer currPage) {
PageBean<Department> pageBean = new PageBean<Department>();
//封装当前页数
pageBean.setCurrPage(currPage);
//封装每页显示的记录数
int pageSize = 3;
pageBean.setPageSize(pageSize);
//封装总记录数
int totalCount = departmentDao.findCount();
double tc = totalCount;
pageBean.setTotalCount(totalCount);
//封装总页数
Double totalPage = Math.ceil(tc/pageSize);
pageBean.setTotalPage(totalPage.intValue());
//封装每页显示的数据
int begin = (currPage-1) * pageSize;
java.util.List<Department> depts = departmentDao.findByPage(begin,pageSize);
pageBean.setList(depts);
return pageBean;
}

findAll方法里调用Service层的方法返回一个复杂的集合(有当前页,和查询得到的信息集合),这个集合我们创建一个类pageBean来管理

package cn.nyan.domain;

import java.util.List;

/**
* 分页封装的类
* @author Administrator
*
*/
public class PageBean<T> {
private int currPage;
private int pageSize;//每页显示的记录数
private int totalCount;//总的记录数
private int totalPage;//总页数
private List<T> list;//每页显示的数据
getter/setter

Dao层实现总记录数的查询和对象的总记录集合

@Override
public int findCount() {
String hql = "select count(*) from Department";
List<Long> list = this.getHibernateTemplate().find(hql);
if(list.size()>0){
return list.get(0).intValue();
}
return 0;
} @Override
public List<Department> findByPage(int begin, int pageSize) {
DetachedCriteria criteria = DetachedCriteria.forClass(Department.class);
List<Department> list = this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize);
return list;
}

返回的pageBean通过Action返回页面,将pageBean放入ActionContext值栈中,使用OGNL表达式进行取值

public String findAll(){
PageBean<Department> pageBean = departmentService.findByPage(currPage);
//将pageBean放入值栈中
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}

在页面读取:

<table cellspacing="0" border="1" class="table1">

<thead>
<tr><th width="450">部门名称</th><th width="450">编辑</th></tr>
</thead> <!-- 获取pageBean对象属性 -->
<s:iterator value="list" var="department">
<tbody>
<tr>
<td align="center"><s:property value="#department.dname"/></td>
<td align="center"><a href="editDept.jsp"><img src="${pageContext.request.contextPath }/images/edit.png"></a></td>
</tr>
</tbody>
</s:iterator> </table>
<br/> <table border="0" cellspacing="0" cellpadding="0" width="900px">
<tr>
<td align="right">
<span>第<s:property value="currPage"/>/<s:property value="totalPage"/>页</span>
<span>
<s:if test="currPage != 1">
<a href="${pageContext.request.contextPath }/department_findAll.action?currPage=1">[首页]</a>&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="currPage-1"/>">[上一页]</a>&nbsp;&nbsp;
</s:if>
<s:if test="currPage != totalPage">
<a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="currPage+1"/>">[下一页]</a>&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="totalPage"/>">[尾页]</a>&nbsp;&nbsp;
</s:if>
</span>
</td>
</tr>
</table>

java--Hibernate实现分页查询的更多相关文章

  1. hibernate 的分页查询

    hibernate的分页查询有个好处,就是不用管数据库方言.比如db2的分页查询很麻烦,但是用hibernate的方式,就完全不用管这些了 /* 使用HQL分页查询Customer信息 */ publ ...

  2. 用Hibernate实现分页查询

    分页查询就是把数据库中某张表的记录数进行分页查询,在做分页查询时会有一个Page类,下面是一个Page类,我对其做了详细的注解: package com.entity; /** * @author:秦 ...

  3. Hibernate实现分页查询

    分页查询就是把数据库中某张表的记录数进行分页查询,在做分页查询时会有一个Page类,下面是一个Page类,我对其做了详细的注解: 1 package com.entity; 2 /** 3 * @au ...

  4. Java GUI+mysql+分页查询

    1.要求 : 创建一个学生信息管理数据库 2.实现分页查询 代码如下: a)学生实体类: /** * @author: Annie * @date:2016年6月23日 * @description: ...

  5. Java基础94 分页查询(以MySQL数据库为例)

    1.概述 分页查询,也可叫做分批查询,基于数据库的分页语句(不同数据库是不同的).  本文使用的事MySql数据库.       假设:每页显示10条数据.       Select * from c ...

  6. Hibernate 条件-分页查询

    这里我们继续跟着上一次的节奏继续学习Hibernate的查询. 1.条件查询一(占位符) 按照占位符的方式进行条件查询,这里query有一个setInteger(arg1, arg2)方法,其中第一个 ...

  7. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException

    场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...

  8. java开发之分页查询

    工具类 package com.luer.comm.utils; import java.util.List; public class PageBean<T> { //已知数据 priv ...

  9. Lucene 05 - 使用Lucene的Java API实现分页查询

    目录 1 Lucene的分页查询 2 代码示例 3 分页查询结果 1 Lucene的分页查询 搜索内容过多时, 需要考虑分页显示, 像这样: 说明: Lucene的分页查询是在内存中实现的. 2 代码 ...

  10. Java : Hibernate 动态+分页+自定义字段+自定义实体类查询

    // 组合查询public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount ...

随机推荐

  1. JavaScript函数的中实参个数和形参个数的获取

    首先先理解下什么是函数的形参和函数的实参,其实很好理解的,下面举例说明 如何获取形参的长度以及实参的长度 获取实参的长度 可以看到控制台输出的长度是3, 这里有疑问了,arguments是什么那? a ...

  2. 批处理--执行sql(mysql数据库)

    @echo off rem test.sql文件 for %%i in (test.sql) do ( echo excute %%i mysql -u用户名 -p密码 -D数据库名 < %%i ...

  3. Http权威指南学习研究

    学习时间:                                   该学习:第六章  6.6小节   加油   185页 2017年5月15日15:13:00 今天任务: 看完前两章节: ...

  4. iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

    本文转载至 http://www.tuicool.com/articles/3ymMzub CSDN博客原文  http://blog.csdn.net/hmt20130412/article/det ...

  5. 只需两步删除 node_modules

    peng@PENG-PC /E/_My_File_____/home/learn/web_qianduan/mithril-demo/demo2/mithril -demo $ npm install ...

  6. Java并发之ArrayBlockingQueue

    ArrayBlockingQueue是一个由数组支持的有界阻塞队列.此队列按 FIFO(先进先出)原则对元素进行排序.队列的头部是在队列中存在时间最长的元素.队列的尾部是在队列中存在时间最短的元素.新 ...

  7. Linux shell join命令详解

    Linux join命令 2012-02-09 17:49:00| 分类: SHELL | 标签:linux join 文件连接 |字号 订阅join命令 功能:“将两个文件里指定栏位同样的行连接起来 ...

  8. MSSQL触发器

    1.触发器语法 CREATE TRIGGER<trigger name> ON [<模式名>.]<表名或视图名> [WITH ENCRYPTION] {{{FOR| ...

  9. OSI 与 TCP/IP

    OSI参考模型 物理层(Physical Layer) --- 数据表示.物理层规定了激活.维持.关闭通信端点之间的机械特性.电气特性.               功能特性以及过程特性.该层为上层协 ...

  10. shiro2

    mapper接口:根据用户id查询用户权限的菜单 service接口:根据用户id查询用户权限的菜单 获取用户权限范围的url 思路: 在用户认证时,认证通过,根据用户id从数据库获取用户权限范围的u ...