Spring+Hibernate实现的DAO层公共类
时间:2011-01-17 blogjava 心梦帆影
此EntityDao接口与EntityDaoImpl实现类,可取代了我们平时写的UserDao,NewsDao,CompanyDao等等,可直接供Service层调用.其中实现类的代码如下:
/**
* Copyright 2009-1012 the original author or authors.
* My Blog site: http://www.blogjava.net/rongxh7
*/
package rong.common.dao;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;
import rong.common.utils.Pager;
import rong.util.MyHibernateDaoSupport;
/** *//**
* Dao层接口的实现类
* 许多人习惯根据不多的业务逻辑定义不同的DAO层接口,如UserDao,NewsDao,CompanyDao等等,
* 这样往往使得编码量十分庞大,而且带来了维护的困难,因此,抽取此DAO层接口,收录大部分
* DAO层必须的方法,以供Service层调用。
* @author rongxinhua
* @version 1.0
* @param <T> 范型,指实体类
* @param <PK> 范型,指实体类主键的数据类型,如Integer,Long
* @see rong.common.dao.EntityDao
*/
@Repository(value="entityDao")
public class EntityDaoImpl<T,PK extends Serializable> extends MyHibernateDaoSupport implements EntityDao<T, PK>{
/** *//**
* 保存实体
* 包括添加和修改
* @param t 实体对象
*/
public void saveOrUpdate(T t){
getHibernateTemplate().saveOrUpdate(t);
}
/** *//**
* 更新实体
* 可用于添加、修改、删除操作
* @param hql 更新的HQL语句
* @param params 参数,可有项目或多项目,代替Hql中的"?"号
*/
public void update(final String hql,final Object params){
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for(int i=0; i<params.length; i++){
query.setParameter(i, params[i]);
}
query.executeUpdate();
return null;
}
});
}
/** *//**
* 删除实体
* @param t 实体对象
*/
public void delete(T t){
getHibernateTemplate().delete(t);
}
/** *//**
* 删除实体
* @param entityClass 实体类名
* @param id 实体的ID
*/
public void delete(Class<T> entityClass,PK id){
getHibernateTemplate().delete(get(entityClass,id));
|