接连载2,下面我们开始应用Hibernate core API封装BaseHibernateDao基类:代码如下:(有部分省略),在这个抽象类中主要封装Hibernate分页等代码,对于本应封装到此抽象类的其它进行持久化操作,与分页无关的方法都一并省略。在此基类中,应用到了我们在连载2中编写的PageUtil类,作为分页的封装组件,便于在Struts框架调用,并把结果在DisplayTag列表组件中使用。
package com.jc.book.dao;
import java.io.Serializable; import java.util.List;
import com.jc.book.factory.HibernateSessionFactory; import com.jc.book.util.PageUtil;
public abstract class BaseHibernateDao { private Session session=null; public void setSession(Session session){ this.session=session; } protected Session getSession() { return HibernateSessionFactory.getSession(); } protected void closeSession() { this.session=null; HibernateSessionFactory.closeSession(); }
/** * Hibernate数据库分页 * @param hql 查询hql语句 * @param curPage 当前页数 * @param pageSize 每页记录数 * @return PageUtil分页组件 */ public PageUtil listByHibernatePage(String hql, int curPage,int pageSize) { if (null==hql){ return null; } Query query = this.getSession().createQuery(hql); //设置开始检索的起始记录 query.setFirstResult((curPage-1)*pageSize); //设置每次检索返回的最大对象数 query.setMaxResults(pageSize); List list = query.list(); PageUtil pageUtil=new PageUtil(); pageUtil.setList(list);
String queryString = ""; if (hql.toUpperCase().indexOf("SELECT") != -1) { int i = query.getQueryString().toUpperCase().indexOf("FROM"); queryString = "Select count(*) " + hql.substring(i,hql.length()); } else { queryString = "Select count(*) " + hql; } int j = queryString.toUpperCase().lastIndexOf("ORDER"); if (j!=-1){ queryString = queryString.substring(0, j); } Query cquery = this.getSession().createQuery(queryString); cquery.setCacheable(true); int recTotal = ((Integer)cquery.iterate().next()).intValue(); pageUtil.setTotal(recTotal); return pageUtil; }
|