首页 > 编程语言 > 详细

Spring——HibernateTemplate、hibernateDaoTemplate

时间:2015-01-29 09:29:04      阅读:479      评论:0      收藏:0      [点我收藏+]

Template

(1)spring在整合Hibernate进行事务管理的时候,会出现一些固定的代码,例如UserDAOImplsave()方法中有如下代码:

Session s = null;

try {

s = sessionFactory.openSession();

s.getTransaction().begin();

s.save(user);

s.getTransaction().commit();

} catch (HibernateException e) {

e.printStackTrace();

s.getTransaction().rollback();

} finally {

if (s != null) {

s.close();

s = null;

}

}

(2)当有多个事务时,这些代码将会重复,可以使用Spring的模版将其固定的部分写好,然后填入自己的逻辑即可

(3)在配置文件配置HibernateTemplate类,该类封装了sessionFactory,该类已经将固定的代码写好,其中调用了SessionFactory类的相关方法

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

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

 </bean>

(4)修改后的UserDAOImpl

package com.zgy.impl;

 

import javax.annotation.Resource;

 

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

import com.zgy.dao.UserDAO;

import com.zgy.model.User;

 

@Component("u")

public class UserDAOImpl implements UserDAO {

 

private HibernateTemplate hiberanteTemplate;

 

 

public HibernateTemplate getHiberanteTemplate() {

return hiberanteTemplate;

}

@Resource

public void setHiberanteTemplate(HibernateTemplate hiberanteTemplate) {

this.hiberanteTemplate = hiberanteTemplate;

}

 

public void save(User user) {

/*

 * 一般情况下,使用SessionFactory访问数据库时,需要用到以下代码,但是使用Template将可以简化

 *  Session s = null;

try {

s = sessionFactory.openSession();

s.getTransaction().begin();

s.save(user);

s.getTransaction().commit();

} catch (HibernateException e) {

e.printStackTrace();

s.getTransaction().rollback();

} finally {

if (s != null) {

s.close();

s = null;

}

}

 */

hiberanteTemplate.save(user);

}

}

 

(5)由于hiberanteTemplate已经由Spring注入,所以直接调用HibernateTemplate类的save()方法即可。

(6)HibernateTemplateHibernate的异常封装为DataAccessException,它是Run提么Exception的子类


HibernateDaoSuppport

(1)可以抽象出一个SuperDAO,封装hibernateTemplate

package com.zgy.dao;

 

import javax.annotation.Resource;

 

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

@Component

public class SuperDAO {

private HibernateTemplate hibernateTemplate;

 

public HibernateTemplate getHibernateTemplate() {

return hibernateTemplate;

}

@Resource

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

}

 

(2)其他XXXDAO只需继承SuperDAO,即可获得hibernateTemplate

package com.zgy.impl;

 

import org.springframework.stereotype.Component;

import com.zgy.dao.SuperDAO;

import com.zgy.dao.LogDAO;

import com.zgy.model.Log;

 

@Component("logDAO") 

public class LogDAOImpl extends SuperDAO implements LogDAO {

@Override

public void saveLog(Log log) {

super.getHibernateTemplate().save(log);

}

}

 

(3)另一种使用HibernateTemplate的方式是使用HibernateDaoSupport

(4)在SuperDAO中继承HibernateDaoSupport

package com.zgy.dao;

 

import javax.annotation.Resource;

 

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import org.springframework.stereotype.Component;

@Component

public class SuperDAO extends HibernateDaoSupport{

 

@Resource(name="hibernateTemplate")

public void setSuperHibernateTemplate(HibernateTemplate hibernateTemplate) {

super.setHibernateTemplate(hibernateTemplate);

}

}

 

(5)其他的XXXDAO继承SuperDAO

package com.zgy.impl;

 

import org.springframework.stereotype.Component;

import com.zgy.dao.SuperDAO;

import com.zgy.dao.LogDAO;

import com.zgy.model.Log;

 

@Component("logDAO") 

public class LogDAOImpl extends SuperDAO implements LogDAO {

@Override

public void saveLog(Log log) {

super.getHibernateTemplate().save(log);

}

}



技术分享

Spring——HibernateTemplate、hibernateDaoTemplate

原文:http://blog.csdn.net/yaguanzhou2014/article/details/43243621

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!