您的位置:首页 > 编程语言 > Java开发

边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(三)

2010-02-14 19:27 423 查看
实体Bean创建完毕后,接下来就是关键的Dao层了,为了使各个实体Bean可以只通过一个Dao层进行基本的增删改查,我们采用了JDK1.5里面的新特性泛型进行配置.这里只是简单说明BasicDaoImpl的实现方法,代码如下:

package org.lxh.dao.impl;

import java.io.Serializable;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.lxh.dao.interfaces.BasicDaoIf;
import org.springframework.stereotype.Repository;

@Repository("basicDao")
public  class BasicDaoImpl<T,PK extends Serializable>extends BasicSupportDao implements BasicDaoIf<T, PK> {

@Override
public boolean deleteAll(final T t) {
getHibernateTemplate().deleteAll(this.findAll((Class<T>)t.getClass()));
return true;
}

@Override
public boolean deleteById(final Class<T> entityClass,final PK id) {
getHibernateTemplate().delete(this.findById(entityClass,id));
return true;
}

@Override
public List<T> findAll(final Class<T> entityClass) {

return getHibernateTemplate().findByCriteria(DetachedCriteria.forClass(entityClass));
}

@Override
public T findById(final Class<T> entityClass,final PK id) {

return (T)getHibernateTemplate().get(entityClass, id);
}

@Override
public boolean save(final T t) {
getHibernateTemplate().save(t);
return true;
}

@Override
public boolean update(final T t) {
getHibernateTemplate().update(t);
return true;
}

}


Dao层的实现采用SpringJpa的方式,里面的Repository相当于xml中<bean>里面内容,而basicDao是等同于<bean id=”basicDao”></bean>从类中发现除了引用了接口之外,还会发现继承了一个BasicSupportDao ,BasicSupportDao 目前功能只有一个用于继承Spring中的HibernateDaoSupport,然后把HibernateTemplate注入,如果不采用这个方法的话而采用直接extends HibernateDaoSupport会出现以下错误代码:"org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'basicDao' is defined”,因为Spring在采用JPA定义的时候会把当前类实例化,如果继承了HibernateDaoSupport的话,因为HibernateDaoSupport源码中SessionFactory和HibernateTemplate是final的不能修改的,所以会报错不能从Spring配置文件中注入,所以必须要新创建一个BasicSupportDao用来代替。代码如下:

package org.lxh.dao.impl;

import javax.annotation.Resource;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BasicSupportDao extends HibernateDaoSupport {

@Resource(name="hibernateTemplate")
public void setHibernatetemplate(HibernateTemplate hibernateTemplate){
super.setHibernateTemplate(hibernateTemplate);
}

}

其中@Resource(name="hibernateTemplate") 是用于指向Spring中配置的xml文件里面bean的id名字为hibernateTemplate,也可以指向@Service、@Repository、@Component所对应的名字,除了上面的方法可以在BasicDaoImpl中加入Spring中Hibernate的模板,hibernateTemplate,生成getter、setter方法,也可以运行通过不会报错,在Spring3.0中的例子是比较推荐使用这种直接加入hibernateTemplate方法的。
注意:如果在public class BasicDaoImpl class 前面加入 abstract 的话也会出现找不到basicDao这个错误的,解决方法暂时没有找到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐