zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Unity 粒子系统 特效 移除屏幕外面后再移回来 不会显示问题
    同步读取各平台StreamingAssets文件
    cocos2d-x for android 环境搭建&交叉编译
    lua 热更新
    php连接mysql超时问题
    svn仓库自动同步(主库、从库自动同步)
    游戏开发进度、状况以及结果的关系(个人感言)
    centos 重启服务命令
    编译时,输出信息重定向到文件
    vs开发的程序内存错误
  • 原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/6494531.html
Copyright © 2011-2022 走看看