分享:Hibernate+Struts分页代码(二)

    技术2022-05-11  147

    现在展示在大家面前的是查询分页两个核心类 :AbstractSearch(预查询初始化程序)、AbstractList(分页及初始化分页程序),代码如下: /********************************AbstractSearch类************************************/ package com.nyhr.struts.frame; import java.util.List; import com.nyhr.struts.beans.HibernateUtil; /**  * <p>Title: 预查询初始化程序</p>  * <p>Description: 所有的初始化查询必须继承此类,本类只负责预查询ID集和Page对象的初始化,不实现显示逻辑</p>  * <p>Copyright: Copyright (c) 2006</p>  * <p>Company: 四方人才网</p>  * @author Yeno.hhr  * @version 1.0  */ public abstract class AbstractSearch {     public AbstractSearch()     {         super();     }     /**      * 根据HQL查询出记录的主键ID(主索引)集合      * 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例      * @param hql 不带查询的查询语句      * @return idArray 主索引集合(可以主键ID,也可以是复合ID)      */     public Object[] getIDList(String hql)     {         List list = HibernateUtil.query(hql);         if (list==null || list.size()==0)             return null;         return list.toArray();     }     /**      * 根据HQL查询出记录的主键ID(主索引)集合      * 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例      * @param hql 带参数的查询语句      * @param bean 参数设置实体类      * @return Object[] 主索引集合(可以主键ID,也可以是复合ID)      */     public Object[] getIDList(String hql, Object bean)     {         List list = HibernateUtil.query(hql,bean);         if (list==null || list.size()==0)             return null;         return list.toArray();     }     /**子类方法:根据子类的需要选择调用AbstractSearch的“带参”和“不带参”两种查询中的一种返回主键ID的数组集*/     abstract public Object[] getList();     /**子类方法:设定查询条件*/     abstract protected void condition(); } /********************************AbstractList类************************************/ package com.nyhr.struts.frame; import com.nyhr.struts.page.*; import com.nyhr.struts.constant.SysConstant; import com.nyhr.struts.hibernate.HibernateSessionFactory; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import java.util.List; import java.util.ArrayList; /**  * <p>Title: 分页及初始化分页程序</p>  * <p>Description: 所有的初始化分页必须继承此类,如果是预查询调用,同时会初始化Page实体,否则Page实体会由FormBean提交生成</p>  * <p>Copyright: Copyright (c) 2006</p>  * <p>Company: 四方人才网</p>  * @author Yeno.hhr  * @version 1.0  */ abstract public class AbstractList {     private Page page;     /**查询结果的主键ID集*/     private Object[] idList;         public AbstractList(){}     /**      * 预查询初始化分页构造(初次查询)      * @param hql 查询语句      * @param search 预查询类      */     public AbstractList(AbstractSearch search){         this.idList=search.getList();     }     /**      * 查询分页构造(分页查询)      * @param page 分页状态实体      * @param idList      */     public AbstractList(Page page, Object[] idList){         this.idList=idList;         this.page=page;     }     /**子类方法:设置分页查询的查询语句*/    abstract protected String getHql();    /**     * 返回查询结果     * @return Result     */    public Result getResult(){        if(page==null){            if(idList==null)                this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);            else                this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);        }        return new Result(page, getListByPage());    }    /**     * 分页查询,返回当前页的查询结果集     * @param hql     * @return list 结果集     */    public List getListByPage(){        List list = null;        if (page.getTotalPage() < 1)            return list;        try{            String hql=getHql();            if(hql==null || hql.equals(""))                return list;            Object[] bean=getCurrentIds();            if(bean!=null)                list=HibernateUtil.query(hql,bean);            else                list=HibernateUtil.query(hql);        }catch(Exception e){            System.out.println(e.getMessage());            throw new RuntimeException(e);        }        return list;    }     /**     * 从查询结果的ID集中找出当前页的ID集     * @param arr 所有查询结果的主键ID集     * @return Object[]     */    private Object[] getCurrentIds(){        if(idList==null)    return null;        ArrayList<Object> list = new ArrayList<Object>();        int begin = page.getBeginIndex();        int ends = page.getTotalRecords();        int end = begin+page.getEveryPage();        if (end >= ends)            end = ends;        for (int l=begin;l<end;l++){            list.add(idList[l]);        }                return list.toArray();    }    /**     * 返回查询结果主键ID集的字符串组合形式     * @return String     */    public String getIdList(){        String ids="";        if(idList == null)            return ids;        for(int x=0; x<idList.length; x++){            ids+=idList[x].toString();            if(x<idList.length-1)                ids+=",";        }        return ids;    }}/********************************HibernateUtil类************************************/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;    }}

    最新回复(0)