基于hibernate的通用、”万能“Dao的设计(二)之基础BaseDao


/** 
* 基础Dao层,主要放置通用的一些方法 
* 
* @author lxiaodao 
* 
*/ 
public class BaseDao { 

    protected Logger log = LoggerFactory.getLogger(getClass()); 
    @Autowired 
    protected SessionFactory sessionFactory; 
    protected Class<?> entityClass; 
    public BaseDao() { 

    } 
    public BaseDao(SessionFactory sessionFactory) { 
        this.sessionFactory = sessionFactory; 

    } 
    /** 
     * 预留重载能力,提供多数据源? 
     * 
     * @param sessionFactory 
     */ 
    public void setSessionFactory(SessionFactory sessionFactory) { 
        this.sessionFactory = sessionFactory; 
    } 

    /** 
     * 获取在该对象之上的Criteria实例对象     
     * @return Criteria实例对象 
     */ 
    protected Criteria getBaseCriteria() { 
        return getSession().createCriteria(entityClass); 
    } 

    public Session getSession() { 
        Assert.notNull(sessionFactory, "-----------sessionFactory can not be null-----------------"); 
        return sessionFactory.getCurrentSession(); 
    } 

    // -------------------------------------------------------------- 
    // 通用的增删改 
    // ---------------------------------------------------------------
    /**     
     * @param o 保存实体对象 
     * @return 主键 
     */ 
    public Serializable save(Object o) { 
        return this.getSession().save(o); 
    } 

    /** 
     * 新增或者更新     
     * @param o 
     */ 
    public void saveOrUpdate(Object o) { 
        this.getSession().saveOrUpdate(o); 
    } 
    /** 
     * 更新     
     * @param o 
     */ 
    public void update(Object o) { 
        this.getSession().update(o); 
    } 
    public void delete(Serializable id) { 
        delete(load(id)); 
    } 
    public Object get(Serializable id) { 
        return this.getSession().get(this.entityClass, id); 
    } 
    public Object load(Serializable id) { 
        return this.getSession().load(this.entityClass, id); 
    } 
    /** 
     * 删除实体    
     * @param obj 
     */ 
    public void delete(Object obj) { 
        this.getSession().delete(obj); 
    } 

    /** 
     * 逐个删除,保证缓存与数据库的统一      
     * @param ids 主键值, 
     * @return 
     */ 
    @Transactional 
    public int deleteAll(Serializable... ids) { 
        for (Serializable id : ids) { 
            delete(load(id)); 
        } 
        return ids.length; 
    } 
  
} 

你可能感兴趣的:(DAO,Hibernate)