Spring学习——(八)关于HibernateTemplate的使用

来源:互联网 发布:log4j ubuntu 不生效 编辑:程序博客网 时间:2024/05/10 05:47

Spring4.2.5中添加了对HibernateTemplate的支持,模板化的编程思想使得在操作session的方法的时候更加简便了。

首先在XML文件中添加一个HibernateTemplate对象:

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory"></property></bean>
之后在DAO层就不需要再获得SessionFactory继而获得session对象再实现session的方法了,直接操作HibernateTemplate对

象,依旧采用注入的方式,将HibernateTemplate对象注入UserDAOImpl之中。之后便可以通过其调用原本session中的方法。

package cn.wqy.DAO;import javax.annotation.Resource;import org.springframework.orm.hibernate4.HibernateTemplate;import org.springframework.stereotype.Repository;import cn.wqy.model.User;@Repository("userDAO")public class UserDAOImpl implements UserDAO {private HibernateTemplate hibernateTemplate;public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}@Resourcepublic void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}@Overridepublic void add(User user) {// TODO Auto-generated method stubhibernateTemplate.save(user);}}
在HibernateTemplate的模板类中封装了session的许多方法,封装过程是采用的callBack的形式,可以看做是一个钩子函数。每个封

装的方法返回一个方法的对象,这个方法包括了对session的获取等操作,只是空出了操作的具体执行,这个方法传入了一个

HibernateCallback接口对象,含有一个doInHibernate方法,利用这个接口对象将doInHibernate方法放在上面说的空白位置。在真正

执行方法的时候实例化一个接口对象,传入session的方法。以save方法为例:

@Overridepublic Serializable save(final Object entity) throws DataAccessException {return executeWithNativeSession(new HibernateCallback<Serializable>() {@Overridepublic Serializable doInHibernate(Session session) throws HibernateException {checkWriteOperationAllowed(session);return session.save(entity);}});}




0 0
原创粉丝点击