码迷,mamicode.com
首页 > 编程语言 > 详细

Spring——HibernateTemplate、hibernateDaoTemplate

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

标签:spring

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

标签:spring

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!