hibernateTemplate 与 hibernateDaosupport

来源:互联网 发布:js上下文 编辑:程序博客网 时间:2024/05/14 22:07
HibernateTemplate

    HibernateTemplateSpring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。

    该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久层逻辑,通用的CRUD操作由HibernateTemplate完成.

HibernateDaoSupport

HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:

1>public final HibernateTemplate getHibernateTemplate()

2>public final void setSessionFactory(SessionFactory sessionFactory)

其中setSessionFactory方法用来接收SpringApplicationContext的依赖注入,可接收配置在SpringSessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。

同样常用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操作,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活。

配置方案——Spring+hibernate访问数据库有以下几种方法:

1>注入SessionFactory

spring配置文件中,对Dao注入sessionFactory,如下所示

配置文件相关配置如下:

<bean id="manageEmpDaoImpl" 

    class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">

       <property name="sessionFactory" ref="sessionFactory" />

</bean>

Dao编码如下:

publicclass ManageEmpDaoImpl extendsHibernateDaoSupport implementsManageEmpDao{

      publicvoid addEmp(Emp emp) {

          this.getHibernateTemplate().save(emp);

       }

      publicList<Emp> getEmpList() {

          returnnull;

       }

   }

这里的sessionFacotry注入不是给类的,而是给继承HibernateDaoSupport类的sessionFactory,在上面源码中可以看到。这样编写的一个好处就是我们不再需要关心关闭、是否连接成功等问题。主要是很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。而且也没有必要这样做。

2>注入HibernateTemplate

这种方法本质上跟上面的sessionFacotry一样,只不过进行了一层包装,好处就是Dao中的类就不用再继承那个HibernateDaoSuport了,不过要先配置好HibernateTemplate

    配置文件如下所示:

    <beanid="hibernateTemplate"

       class="org.springframework.orm.hibernate3.HibernateTemplate">

       <propertyname="sessionFactory"ref="sessionFactory"/>

    </bean>

    <beanid="manageEmpDaoImpl"class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">

      <propertyname="hibernateTemplate"ref="hibernateTemplate"/>

    </bean>

    DAO编码如下所示:

    publicclass ManageEmpDaoImpl implementsManageEmpDao {

       privateHibernateTemplate hibernateTemplate;

       publicvoid addEmp(Emp emp) {

           this.hibernateTemplate.save(emp);

        }

       publicList<Emp> getEmpList() {

           returnnull;

        }

       publicHibernateTemplate getHibernateTemplate() {

           returnhibernateTemplate;

        }

       publicvoid setHibernateTemplate(HibernateTemplate hibernateTemplate) {

           this.hibernateTemplate= hibernateTemplate;

        }

    }