zoukankan      html  css  js  c++  java
  • Hibernate和Struts分页查询

    分页查询数据库方法
    /**
         * 分页查询方法
         * @param sql,pageNO,maxResult
         * @return List
         */
        public List<Object> queryPageSql(String hql, int pageNo, int pageSize){
            try{
                Session session=HibernateUtil.getSession();
                
                Query q=session.createQuery(hql);
                //Hibernate查询起始位置
                q.setFirstResult((pageNo-1)*pageSize);
                //从起始位查询多少条数据
                q.setMaxResults(pageSize);
            
                List<Object> list=(List<Object>)q.list();
                
                return    list;
                
                
            }catch(Exception e){
                
                e.printStackTrace();
            }finally{
                HibernateUtil.closeSession();
                
            }
            
            
            return null;
        }
    
    分页实体类PageModel,主要的分页查询方法pageQuery
    
    PACKAGE SSH.GX;
    import java.util.List;
    import ssh.Tb.User;
    
    public class PageModel {
        private int totalRecords; //数据总条数
        private int pageNo;        //当前页
        private int pageSize;    //每页多少条
        private List<Object> list;//查询到的数据集合
        private int totalPageNo;//共多少页
    
        /**
         * 获取上一页
         */
        public int getPreviousPageNo(){
            if(pageNo>1){
                return pageNo-1;
            }else{
                return 1;
            }
            
        }
        
        /**
         * 获取下一页
         */
        public int getNextPageNo(){
            if(pageNo>=getTotalPageNo()){
                //如果总页数为0这返回1,否则返回总页数
                return getTotalPageNo()==0?1:getTotalPageNo();
            }else{
                return pageNo+1;
            }
        }
    
        /**
         * 获取分页集合函数
         * @param pageModel
         * @param hql
         * @param pageTab
         * @return PageModel
         * @see pageTab控制查询的1:下一页;2:上一页;3:第一页;4:最后一页
         */
        
        public PageModel pageQuery(PageModel pageModel,String hql,int pageTab){
            HibernateDB hdb=new HibernateDB();
            //查询数据的总条数并赋值给totalRecords变量
            List<Object> lists=(List<Object>)hdb.querySql(hql);
            totalRecords=lists.size();
            
            //给没有查询条数赋值默认值
            if(pageModel.getPageSize()==0){pageModel.setPageSize(5);}
            
            //执行获取下一页
            if(pageTab==1){
                //执行获取下一页
                if(pageModel.getPageNo()==0){
                 pageModel.setPageNo(1);
                }else{
                    pageModel.setPageNo(pageModel.getNextPageNo());
                }
                
                }else if(pageTab==2){
                    //执行获取上一页
                    if(pageModel.getPageNo()==0)
                         pageModel.setPageNo(1);
                        else
                            pageModel.setPageNo(pageModel.getPreviousPageNo());
                        
                }else if (pageTab==3){
                    //获取第一页
                    pageModel.pageNo=1;
                }else{
                    //获取最后一页
                    pageModel.pageNo=pageModel.getTotalPageNo();
                }
                
            //查询分页数据
            list=(List<Object>)hdb.queryPageSql(hql,pageModel.getPageNo(),pageModel.getPageSize());
    
            return pageModel;
        }
        
        public int getTotalRecords() {
            return totalRecords;
        }
    
        public void setTotalRecords(int totalRecords) {
            this.totalRecords = totalRecords;
        }
    
        public int getPageNo() {
            return pageNo;
        }
    
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getTotalPageNo() {
            return totalPageNo=(totalRecords + pageSize -1)/pageSize;
        }
    
        public void setTotalPageNo(int totalPageNo) {
            this.totalPageNo = totalPageNo;
        }
    
        public List<Object> getList() {
            return list;
        }
    
        public void setList(List<Object> list) {
            this.list = list;
        }
        
    }
    
    
    Action类查询,必须使用spring配置文件将PageModel类注入到Action中。
    /**
         * 分页查询下一页
         * @return
         */
        public String nextQuery(){
            
            
            pageModel.pageQuery(pageModel, "from User", 1);
            
            return "query";
        }
        
         /**
         * 分页查询上一页
         * @return
         */
        public String backQuery(){
            pageModel.pageQuery(pageModel, "from User", 2);
            return "query";
        }
        /**
         * 分页查询第一页
         * @return
         */
        public String firstQuery(){
            pageModel.pageQuery(pageModel, "from User", 3);
            return "query";
        }
        /**
         * 分页查询最后一页
         * @return
         */
        public String endQuery(){
            pageModel.pageQuery(pageModel, "from User",4);
            return "query";
        }
    
    
    Struts.xml文件配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
            "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
    <!-- 配置Struts支持动态Action, 必须存在 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 
    <!-- strict-method-invocation在2.5版本,为了限制DMI,
    默认启用了严格的方法访问,不想启用要改为false,
    如果启用严格访问模式,无法实现动态Action -->
    <package name="mypackage" extends="struts-default" strict-method-invocation="false">
    <action name="user*" class="ssh.action.UserAction"  method="{1}">
    <result name="success">
    /jsp/mian.jsp</result>
    <result name="login">
    index.jsp
    </result>
    <result name="saveerror">/jsp/save.jsp</result>
    <result name="query">/jsp/query.jsp</result>
    </action>
    
    </package>
    </struts>
    
    query.jsp页面显示
    
    <table>
    <s:iterator  value="pageModel.list"  id="u" >
    <tr>
    <td><s:property value="#u.id"/></td>
    <td><s:property value="#u.username"/></td>
    </tr>
    </s:iterator>
    <tr>
    <td><s:a href="userfirstQuery">首页</s:a>
    <s:a href="userbackQuery?pageModel.pageNo=%{pageModel.pageNo}">上一页</s:a>
    <s:property  value="pageModel.pageNo"  />/<s:property value="pageModel.totalPageNo"/>
    <s:a  href="usernextQuery?pageModel.pageNo=%{pageModel.pageNo}">下一页</s:a>
    <s:a href="userendQuery">末页</s:a></td>
    <td></td>
    </tr>
    </table>
  • 相关阅读:
    图片延迟加载(lazyload)的实现原理
    jquery lazyload延迟加载技术的实现原理分析
    目前为止用过的最好的Json互转工具类ConvertJson
    ASP.NET前台代码绑定后台变量方法总结
    使用MySql时会遇到中文乱码的问题
    asp.net 时间格式大全
    asp.net 记录用户打开和关闭页面的时间
    分页 排序 表格 多功能
    使用Jquery实现可编辑的表格 并使用AJAX提交到服务器修改数据
    Hive和Hbase
  • 原文地址:https://www.cnblogs.com/gynbk/p/6556330.html
Copyright © 2011-2022 走看看