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>
原文地址:https://www.cnblogs.com/gynbk/p/6556330.html