J度空间

Hibernate+Struts分页代码(节选)

转自:http://blog.csdn.net/yeno/archive/2007/01/25/1492788.aspx


public class HibernateUtil {

    
private HibernateUtil(){}  
    
/**
     * 执行数据库查询,返回结果集List
     * 
@param hsql HSQL查询语句
     * 
@return list 结果集
     
*/
    
public static List query(String hql) {
        List list 
= null;
        Query query 
= null;     
        Session sess 
= HibernateSessionFactory.currentSession();
        
try{
            
//创建一条HQL查询语句
            if (hql.toLowerCase().contains("from "))
                query 
= sess.createQuery(hql);
            
else
                 query 
= sess.getNamedQuery(hql);
           
            list 
= query.list();
           
        }
catch(HibernateException e)  {
            System.out.println(
"Hibernate Exception:@"+e.getMessage());
            
throw new RuntimeException(e);
        }
finally {
            HibernateSessionFactory.closeSession();
        }
        
return list;
    }
    
public static List query(String hql, Object bean){
        List list 
= null;
        Query query 
= null;
       
        Session sess 
= HibernateSessionFactory.currentSession();
        
try {
            
//创建一条HQL查询语句
            if (hql.toLowerCase().contains("from "))
                query 
= sess.createQuery(hql);
            
else
                 query 
= sess.getNamedQuery(hql);
           
            query.setProperties(bean);
            list 
= query.list();
        }
catch(HibernateException e) {
            System.out.println(
"Hibernate Exception:@"+e.getMessage());
            
throw new RuntimeException(e);
        } 
finally {
            HibernateSessionFactory.closeSession();
        }
        
return list;
    }
}


这里是分页段的实现代码,分别继承AbstractSearch和AbstractList,实现预查询和分页查询:SearchCompany(预查询)、BaseComSearch(分页查询),代码如下:


package com.nyhr.struts.search;

import com.nyhr.struts.frame.AbstractSearch;
import com.nyhr.struts.form.SearchCompanyForm;

import org.apache.struts.action.ActionForm;

public class SearchCompany extends AbstractSearch{

    
private StringBuffer sql;
    
private SearchCompanyForm form;
    
private TempWhere bean;
    
/**直接由默认查询语句构造 */
    
public SearchCompany(){       
        sql 
= new StringBuffer("select companyId from SysCompany");
    }
    
/**
     * 由指定查询语句查询
     * 
@param hql
     
*/
    
public SearchCompany(String hql){
        sql 
= new StringBuffer(hql);
    }
    
/**
     * 由formBean构造查询语句及参数实体
     * 
@param form
     
*/
    
public SearchCompany(ActionForm form){
        sql 
= new StringBuffer("");
        sql.append(
"select c.companyId from Company as c left join fetch c.companyProps as p left join fetch c.contactInfo as ct ");
        
this.form = (SearchCompanyForm)form;
        condition();
    }
    
/**调用父类的带参查询返回结果*/
    
public Object[] getList(){
        
if(sql==null)    return null;
        
if(bean==null)
            
return getIDList(sql.toString());
        
else
            
return getIDList(sql.toString(), bean);
    }
    
/**
     * 条件查询(条件语句及参数实体在此设定)
     
*/
    
protected void condition(){
        bean 
= new TempWhere();
        sql.append(
" WHERE p.lockedFlag=0 ");
        
if(!form.getCompanyName().equals("")){
            sql.append(
" AND c.companyName=:companyName");
            bean.setCompanyName(form.getCompanyName());
        }           
        
if (!form.getLinkTel().equals("")){
            sql.append(
" AND ct.linkTel=:linkTel");
            bean.setLinkTel(form.getLinkTel());
        }
        
if (!form.getLinkFax().equals("")){
            sql.append(
" AND ct.linkFax=:linkFax");
            bean.setLinkFax(form.getLinkFax());
        }
        
if (!form.getLinkEmail().equals("")){
            sql.append(
" AND ct.linkEmail=:linkEmail");
            bean.setLinkEmail(form.getLinkEmail());
        }
        
if (!form.getLinkman().equals("")){
            sql.append(
" AND ct.linkman=:linkman");
            bean.setLinkman(form.getLinkman());
        }
        
if (!form.getRepute().equals("")){
            sql.append(
" AND p.repute=:repute");
            bean.setRepute(Short.parseShort(form.getRepute()));
        }
        
if (!form.getSpecification().equals("")){
            sql.append(
" AND p.specification=:specification");
            bean.setSpecification(Short.parseShort(form.getSpecification()));
        }
        
if (!form.getVipFlag().equals("")){
            sql.append(
" AND p.vipflag=:vipFlag");
            bean.setVipFlag(Short.parseShort(form.getVipFlag()));
        }
        
if (!form.getDistrict().equals("")){
            sql.append(
" AND p.district=:district");
            bean.setDistrict(Short.parseShort(form.getDistrict()));
        }
        
if (!form.getFealty().equals("")){
            sql.append(
" AND p.fealty=:fealty");
            bean.setFealty(Short.parseShort(form.getFealty()));
        }
        
if (!form.getSourceFlag().equals("")){
            sql.append(
" AND p.sourceFlag=:sourceFlag");
            bean.setSourceFlag(Short.parseShort(form.getSourceFlag()));
        }
        
if (!form.getCompanyProps().equals("")){
            sql.append(
" AND c.companyProps_1=:companyProps");
            bean.setCompanyProps(Short.parseShort(form.getCompanyProps()));
        }
        
if (!form.getCalling().equals("")){
            sql.append(
" AND p.calling=:calling");
            bean.setCalling(Short.parseShort(form.getCalling()));
        }
    }
   
    
class TempWhere{
        
/** companyProps property */
        
private short companyProps;

        
/** linkman property */
        
private String linkman;

        
/** fealty property */
        
private short fealty;

        
/** comapnyName property */
        
private String companyName;

        
/** district property */
        
private short district;

        
/** lockedFlag property */
        
private byte lockedFlag;

        
/** linkFax property */
        
private String linkFax;

        
/** specification property */
        
private short specification;

        
/** linkEmail property */
        
private String linkEmail;

        
/** sourceFlag property */
        
private short sourceFlag;

        
/** linkTel property */
        
private String linkTel;

        
/** repute property */
        
private short repute;

        
/** calling property */
        
private short calling;

        
/** vipFlag property */
        
private short vipFlag;

        
public TempWhere() {
            
super();
            
// TODO 自动生成构造函数存根
        }

        
public TempWhere(short companyProps, String linkman, short fealty, String companyName, short district, byte lockedFlag, String linkFax, short specification, String linkEmail, short sourceFlag, String linkTel, short repute, short calling, short vipFlag) {
            
super();
            
// TODO 自动生成构造函数存根
            this.companyProps = companyProps;
            
this.linkman = linkman;
            
this.fealty = fealty;
            
this.companyName = companyName;
            
this.district = district;
            
this.lockedFlag = lockedFlag;
            
this.linkFax = linkFax;
            
this.specification = specification;
            
this.linkEmail = linkEmail;
            
this.sourceFlag = sourceFlag;
            
this.linkTel = linkTel;
            
this.repute = repute;
            
this.calling = calling;
            
this.vipFlag = vipFlag;
        }

        
public short getCalling() {
            
return calling;
        }

        
public void setCalling(short calling) {
            
this.calling = calling;
        }

        
public String getCompanyName() {
            
return companyName;
        }

        
public void setCompanyName(String companyName) {
            
this.companyName = companyName;
        }

        
public short getCompanyProps() {
            
return companyProps;
        }

        
public void setCompanyProps(short companyProps) {
            
this.companyProps = companyProps;
        }

        
public short getDistrict() {
            
return district;
        }

        
public void setDistrict(short district) {
            
this.district = district;
        }

        
public short getFealty() {
            
return fealty;
        }

        
public void setFealty(short fealty) {
            
this.fealty = fealty;
        }

        
public String getLinkEmail() {
            
return linkEmail;
        }

        
public void setLinkEmail(String linkEmail) {
            
this.linkEmail = linkEmail;
        }

        
public String getLinkFax() {
            
return linkFax;
        }

        
public void setLinkFax(String linkFax) {
            
this.linkFax = linkFax;
        }

        
public String getLinkman() {
            
return linkman;
        }

        
public void setLinkman(String linkman) {
            
this.linkman = linkman;
        }

        
public String getLinkTel() {
            
return linkTel;
        }

        
public void setLinkTel(String linkTel) {
            
this.linkTel = linkTel;
        }

        
public byte getLockedFlag() {
            
return lockedFlag;
        }

        
public void setLockedFlag(byte lockedFlag) {
            
this.lockedFlag = lockedFlag;
        }

        
public short getRepute() {
            
return repute;
        }

        
public void setRepute(short repute) {
            
this.repute = repute;
        }

        
public short getSourceFlag() {
            
return sourceFlag;
        }

        
public void setSourceFlag(short sourceFlag) {
            
this.sourceFlag = sourceFlag;
        }

        
public short getSpecification() {
            
return specification;
        }

        
public void setSpecification(short specification) {
            
this.specification = specification;
        }

        
public short getVipFlag() {
            
return vipFlag;
        }

        
public void setVipFlag(short vipFlag) {
            
this.vipFlag = vipFlag;
        }
    }
}



package com.nyhr.struts.search;

import com.nyhr.struts.frame.AbstractList;
import com.nyhr.struts.page.Page;

import org.apache.struts.action.ActionForm;

public class BaseComSearch extends AbstractList {

    
/**预查询分页,由默认HQL构造初始化查询*/
    
public BaseComSearch(){
        
super(new SearchCompany());       
    }
    
/**预查询分页,由指定HQL构造初始化查询*/
    
public BaseComSearch(String hql){
        
super(new SearchCompany(hql));       
    }
    
/**
     * 预查询分页,由ActionForm构造初始化查询
     * 
@param form formBean
     
*/
    
public BaseComSearch(ActionForm form){
        
super(new SearchCompany(form));
    }
    
/**
     * 查询分页(分页查询)
     * 
@param idList
     * 
@param page
     
*/
    
public BaseComSearch(Object[] idList,Page page){
        
super(page, idList);
    }
    @Override
    
public String getHql(){
        
return "from SysCompany sc where sc.companyId in (:idList)";
    }   
}

BaseComSearch类是对外的入口,Action调用的代码如下(加粗部分就是调用的指令):

/*****************************预查询分页调用
    
public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response) {
        SearchCompanyForm searchCompanyForm 
= (SearchCompanyForm) form;
        
// TODO Auto-generated method stub
        BaseComSearch com = new BaseComSearch(searchCompanyForm);
        Result result 
= com.getResult();
        String idList 
= com.getIdList();
        List list 
= result.getContent();
        Page page 
= result.getPage();
        request.setAttribute(
"idList",idList);
        request.setAttribute(
"list",list);
        request.setAttribute(
"page",page);
        request.setAttribute(
"search",searchCompanyForm);
        
//return null;
        return mapping.findForward("search");
    }

/*****************************查询分页调用

    
public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response) {

        
// TODO Auto-generated method stub
        int totalRecords = Integer.parseInt(request.getParameter("totalRecords"));
        
int everyPage = Integer.parseInt(request.getParameter("everyPage"));
        
int currentPage = Integer.parseInt(request.getParameter("currentPage"));
        Page page 
= PageUtil.createPage(everyPage,currentPage,totalRecords);
        System.out.println(
"totalRecords:"+totalRecords+" everyPage:"+everyPage+" currentPage:"+currentPage);
       
        Result result;
        String forward;
        String idList 
= request.getParameter("idList");
        
if(idList ==null || idList.equals("")){
            result 
= new BaseComSearch().getResult();
            request.setAttribute(
"idList","");
            forward
="page";
        }
else{
            Object[] idLists 
= StringUtil.stringToArray(idList,"[^\\d]+|,");
            System.out.println(idLists[
2]);
            result 
= new BaseComSearch(idLists,page).getResult();
            request.setAttribute(
"idList",idList);
            forward
="pages";
        }

        List list 
= result.getContent();
       
        request.setAttribute(
"page",page);
        request.setAttribute(
"list",list);
        
return mapping.findForward(forward);
    }

posted on 2007-08-07 00:47 蓝色幽默 阅读(358) 评论(0)  编辑  收藏 所属分类: Hibernate

导航

<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(4)

随笔分类

文章分类

相册

搜索

最新评论