pagetemplateimpl.java
来自「一个很好的jbpm应用实例」· Java 代码 · 共 110 行
JAVA
110 行
package c20.dao;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import c20.helper.PageBean;
import c20.helper.PageResult;
/**
* 分页模板实现类
* @author yuxd
*
*/
public class PageTemplateImpl extends HibernateTemplate implements PageTemplate{
/**
* 缺省构造器
*/
public PageTemplateImpl(){
}
/**
* 带sessionFactory参数的构造器
* @param sessionFactory Session工厂对象
*/
public PageTemplateImpl(SessionFactory sessionFactory){
super(sessionFactory);
}
public PageResult find(String queryString, PageBean pageBean) {
return find(queryString, (Object[]) null, pageBean);
}
public PageResult find(String queryString, Object value, PageBean pageBean) {
return find(queryString, new Object[] {value}, pageBean);
}
public PageResult find(final String queryString, final Object[] values, final PageBean pageBean) {
/**
* 使用HibernateCallback回调接口实现分页HQL查询
* 通过定义内部匿名的HibernateCallback类来实现
*/
List resultList = (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
//创建查询Query对象
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
/**
* 通过Query对象的setFirstResult()
* 与setMaxResults()方法设置分页参数
*/
queryObject.setFirstResult((pageBean.getPage()-1)*pageBean.getPageSize());
queryObject.setMaxResults(pageBean.getPageSize());
/**
* 设置占位符对应的查询参数
*/
if (values != null) {
for (int i = 0; i < values.length; i++) {
queryObject.setParameter(i, values[i]);
}
}
//返回查询List列表
return queryObject.list();
}
}, true);
//如果分页信息对象中总记录数小于等于0,查询并设置总记录数
//if(pageBean.getCount() <= 0){
//查询总记录数
String countQuery = getCountQueryString(queryString);
pageBean.setCount(((Integer)find(countQuery, values).get(0)).intValue());
//}
//组成分页查询结果对象
PageResult pageresult = new PageResult();
pageresult.setResultList(resultList);
pageresult.setPageBean(pageBean);
return pageresult;
}
/**
* 私有辅助方法,得到查询总记录数用的HQL语句
* @param queryString 查询HQL语句
* @return 查询总记录数用的HQL语句
*/
private String getCountQueryString(String queryString){
String countQuery = "";
/**
* 组成查询总记录数用的HQL语句,
* 如果原HQL语句以“SELECT”开头,则使用“select count(*) from (XXXX)”形式;
* 否则使用“select count(*) XXXX”形式
*/
if(queryString.toUpperCase().startsWith("SELECT")){
countQuery = "select count(*) from (" + queryString + ")";
}else{
countQuery = "select count(*) " + queryString + "";
}
return countQuery;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?