SSH統合時のDAOの作成方法
public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao{//オブジェクトpublic void saveEntity(BaseEntity){entity.setDeleted(BaseEntity.STATUS_NORMAL);entity.setDeletedTime(null);getHibernateTemplate().save(entity);//オブジェクトpublic void updateEntity(BaseEntity){getHibernateTemplate().update(entity)}//を更新オブジェクトpublic void deleteEntity(BaseEntity){entity.setDeleted(BaseEntity.STATUS_DELETED);entity.setDeletedTime(new Date();getHibernateTemplate().update(}//すべてのエンティティ・オブジェクトを問合せ、削除されたオブジェクト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インタフェース
Javaコード public interface GenericDaoextends Serializable> { /** * Get all objects * @return */ public List 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実装
Javaコード public class GenericDAOHibernateextends Serializable> extends HibernateDaoSupport implements GenericDao{ private Class persistentClass; public GenericDAOHibernate(Class 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 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を継承して使用します.もちろん、自分のビジネスの抽象的な方法を拡張することもできます.
GenericDao汎用DAOインタフェース
Javaコード
public interface GenericDao {
/**
* Get all objects
* @return
*/
public List 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実装
Javaコード
public class GenericDAOHibernate extends HibernateDaoSupport implements GenericDao{
private Class persistentClass;
public GenericDAOHibernate(Class 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 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を継承して使用します.もちろん、自分のビジネスの抽象的な方法を拡張することもできます.