[原创]使用Spring的HibernateDaoSupport实现BaseDaoImpl类
公司要做一个新的小项目,之前的项目代码结构不够好,没有用注解,没有BaseDao接口,导致每一个模块都有大量的重复代码.为了解决这个问题,我写了BaseDao接口和它的实现类BaseDaoImpl.其中核心的代码是整合框架以及通用方法的实现.
-
定义
BaseDao接口. -
定义
BaseDaoImpl类,实现BaseDao,继承org.springframework.orm.hibernate3.support.HibernateDaoSupport.在类上方添加注解Repository以供扫描. -
在
Spring的xml配置文件中注入sessionFactory
classpath:hibernate.cfg.xml
-
在
BaseDaoImpl.java中添加一个方法,以注入sessionFactory对象.@Resource(name = "sessionFactory")
public void setSuperHibernateTemplate(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
} -
配置完成.添加一些通用方法进去
@SuppressWarnings("unchecked")
public PK save(E newInstance) {
return (PK) getHibernateTemplate().save(newInstance);
}public E findById(PK id) {
return (E) getHibernateTemplate().get(getEntityClass(), id);
}@SuppressWarnings("unchecked")
public ListfindAll() {
return getHibernateTemplate().findByCriteria(createDetachedCriteria());
}@SuppressWarnings("unchecked")
public ListfindAllByProperty(String propertyName, Object value) {
DetachedCriteria criteria = createDetachedCriteria();
criteria.add(Restrictions.eq(propertyName, value));
return getHibernateTemplate().findByCriteria(criteria);
}public List
findByExample(E object) {
@SuppressWarnings("unchecked")
ListresultList = getHibernateTemplate().findByExample(object, 0, 1);
return resultList;
}public List
findByExample(E object, int firstResult, int maxResults) {
@SuppressWarnings("unchecked")
ListresultList = getHibernateTemplate().findByExample(object, firstResult, maxResults);
return resultList;
}public void update(E transientObject) {
getHibernateTemplate().update(transientObject);
}public void saveOrUpdate(E transientObject) {
getHibernateTemplate().saveOrUpdate(transientObject);
}public void delete(E persistentObject) {
getHibernateTemplate().delete(persistentObject);
}protected abstract Class
getEntityClass(); protected DetachedCriteria createDetachedCriteria() {
return DetachedCriteria.forClass(getEntityClass());
}@SuppressWarnings("unchecked")
public ListfindByHQL(String hql, Object... params) {
return getHibernateTemplate().find(hql, params);
} -
子类的实现,重写getEntityClass()方法
public class CollectPubDAOImpl extends BaseDaoImpl<CollectPoint, Integer> implements CollectPubDAO{
protected Class
getEntityClass() {
return CollectPoint.class;
}
} -
That's all.Happy coding.
浙公网安备 33010602011771号