基于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; } }