📄 daoimpl.java
字号:
package org.pontifex.orm.hibernate3;
import org.pontifex.orm.hibernate3.PageInfoQueryCallback.PageInfoBuffer;
import org.pontifex.web.mapping.PageInfo;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import java.util.List;
import java.sql.SQLException;
/**
* Created by IntelliJ IDEA.<br>
* User: Songzou<br>
* Date: 2007-4-8<br>
* Time: 11:37:07<br>
*
* 公共dao实现类 主要解决分页查询
*/
public abstract class DaoImpl
implements Dao{
private HibernateTemplate hibernateTemplate ;
protected final HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public final void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
/**
* 分页查询Criteria-----缺点对左外连接支持太差
*/
public PageInfo pageInfoLookup(final PageInfo pageinfo , final PageInfoCriteriaCallback callback) {
return (PageInfo)hibernateTemplate.execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Criteria criteria = callback.doInPageInfo(session); //根据传回
int count = (Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
pageinfo.setTotalRows(count);
List list = null;
if(pageinfo.isShowPages()){
list = criteria.setProjection(null).setFirstResult(pageinfo.getStartIndex()).setMaxResults(pageinfo.getPerPageRows()).list();
}else{
list = criteria.setProjection(null).list();
}
pageinfo.setPageList(list);
return pageinfo;
}
});
}
/**
* 分页查询Query -- 缺点复杂
* 强烈建议使用该分页查询实现
*
*
*
*/
public PageInfo pageInfoLookup(final PageInfo pageinfo , final PageInfoQueryCallback callback){
return (PageInfo) hibernateTemplate.execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
PageInfoBuffer hql_temp = new PageInfoBuffer.PageInfoBufferImpl();
callback.doInPageInfoString(hql_temp);
String hql = hql_temp.toString() ;
//System.out.println(hql);
int index = hql.indexOf("from");
if(index==-1)throw new HibernateException("The hql is not right ");
String selectHql = hql.substring(index);
selectHql = "select count(*) "+selectHql;
// System.out.println(selectHql);
Query query1 = session.createQuery(selectHql);
Query query = session.createQuery(hql);
PageInfoQueryCallback.PageInfoMapValues values = new PageInfoQueryCallback.PageInfoMapValues();
callback.doInPageInfoValues(values);
values.setParameterValue(query);
values.setParameterValue(query1);
int count = (Integer)query1.uniqueResult();
pageinfo.setTotalRows(count);
List list = null;
if(pageinfo.isShowPages()){
list = query.setFirstResult(pageinfo.getStartIndex()).setMaxResults(pageinfo.getPerPageRows()).list();
}else{
list = query.list();
}
pageinfo.setPageList(list);
return pageinfo;
}
});
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -