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);  
  • }  
  • 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  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);  
  •           
  •     }  
  •       
  • }  
  • 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を継承して使用します.もちろん、自分のビジネスの抽象的な方法を拡張することもできます.