public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao{
//存储一个对象
public void saveEntity(BaseEntity entity){
entity.setDeleted(BaseEntity.STATUS_NORMAL);
entity.setDeletedTime(null);
getHibernateTemplate().save(entity);
}
//更新一个对象
public void updateEntity(BaseEntity entity){
getHibernateTemplate().update(entity);
}
//假删除一个对象
public void deleteEntity(BaseEntity entity){
entity.setDeleted(BaseEntity.STATUS_DELETED);
entity.setDeletedTime(new Date());
getHibernateTemplate().update(entity);
}
//查询所有的实体对象,过滤掉那些已经删除的对象
public List findAllEntities(Class entityClass){
enableDeletedFilter();
return getHibernateTemplate().find("from "+entityClass.getName());
}
public BaseEntity findEntityById(Class entityClass,Serializable id){
return (BaseEntity)getHibernateTemplate().get(entityClass, id);
}
// ............. 还可以编写更多的封装方法,比如封装分页查询的逻辑等等
/**
* 启用删除过滤器,这样就能够将那些已经被标识为删除的对象过滤掉
*/
protected void enableDeletedFilter(){
//如果要使得过滤器发挥作用,那么需要在查询前启用过滤器
getHibernateTemplate()
.enableFilter("deletedFilter")
.setParameter("deleted", BaseEntity.STATUS_NORMAL);
}
}
//存储一个对象
public void saveEntity(BaseEntity entity){
entity.setDeleted(BaseEntity.STATUS_NORMAL);
entity.setDeletedTime(null);
getHibernateTemplate().save(entity);
}
//更新一个对象
public void updateEntity(BaseEntity entity){
getHibernateTemplate().update(entity);
}
//假删除一个对象
public void deleteEntity(BaseEntity entity){
entity.setDeleted(BaseEntity.STATUS_DELETED);
entity.setDeletedTime(new Date());
getHibernateTemplate().update(entity);
}
//查询所有的实体对象,过滤掉那些已经删除的对象
public List findAllEntities(Class entityClass){
enableDeletedFilter();
return getHibernateTemplate().find("from "+entityClass.getName());
}
public BaseEntity findEntityById(Class entityClass,Serializable id){
return (BaseEntity)getHibernateTemplate().get(entityClass, id);
}
// ............. 还可以编写更多的封装方法,比如封装分页查询的逻辑等等
/**
* 启用删除过滤器,这样就能够将那些已经被标识为删除的对象过滤掉
*/
protected void enableDeletedFilter(){
//如果要使得过滤器发挥作用,那么需要在查询前启用过滤器
getHibernateTemplate()
.enableFilter("deletedFilter")
.setParameter("deleted", BaseEntity.STATUS_NORMAL);
}
}
GenericDao 泛型DAO接口
- public interface GenericDao<T, PK extends Serializable> {
- /**
- * Get all objects
- * @return
- */
- public List<T> getAll();
- /**
- * Get the object which id =?
- * @param id
- * @return
- */
- public T get(PK id);
- /**
- * save the object
- * @param object
- */
- public void save(T object);
- /**
- * delete the object which id=?
- * @param id
- */
- public void remove(PK id);
- }
public interface GenericDao<T, PK extends Serializable> {
/**
* Get all objects
* @return
*/
public List<T> getAll();
/**
* Get the object which id =?
* @param id
* @return
*/
public T get(PK id);
/**
* save the object
* @param object
*/
public void save(T object);
/**
* delete the object which id=?
* @param id
*/
public void remove(PK id);
}
泛型DAO 实现
- public class GenericDAOHibernate<T,PK extends Serializable> extends HibernateDaoSupport implements GenericDao<T, PK>{
- private Class<T> persistentClass;
- public GenericDAOHibernate(Class<T> persistentClAass) {
- this .persistentClass = persistentClAass;
- }
- public T get(PK id) {
- T entity = (T)super .getHibernateTemplate().get(this .persistentClass, id);
- if (entity==null ){
- logger.warn("Oh !! " +this .persistentClass+"' Object with id " +id+"' not found..." );
- throw new ObjectRetrievalFailureException(this .persistentClass,id);
- }
- return entity;
- }
- public List<T> getAll() {
- return super .getHibernateTemplate().loadAll(this .persistentClass);
- }
- public void remove(PK id) {
- super .getHibernateTemplate().delete(this .get(id));
- }
- public void save(T object) {
- super .getHibernateTemplate().saveOrUpdate(object);
- }
- }
public class GenericDAOHibernate<T,PK extends Serializable> extends HibernateDaoSupport implements GenericDao<T, PK>{
private Class<T> persistentClass;
public GenericDAOHibernate(Class<T> persistentClAass) {
this.persistentClass = persistentClAass;
}
public T get(PK id) {
T entity = (T)super.getHibernateTemplate().get(this.persistentClass, id);
if(entity==null){
logger.warn("Oh !! "+this.persistentClass+"' Object with id "+id+"' not found...");
throw new ObjectRetrievalFailureException(this.persistentClass,id);
}
return entity;
}
public List<T> getAll() {
return super.getHibernateTemplate().loadAll(this.persistentClass);
}
public void remove(PK id) {
super.getHibernateTemplate().delete(this.get(id));
}
public void save(T object) {
super.getHibernateTemplate().saveOrUpdate(object);
}
}
使用方法
任意类继承GenericDAOHibernate来使用。。当然你也可以扩充自己业务抽象的方法。