java--Hibernate实现分页查询

首先在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>
原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/6494531.html