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>
相關文章
相關標籤/搜索