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

Spring整合Hibernate的步骤

2013-11-13 18:26 477 查看
/article/10633050.html

为什么要整合Hibernate?

1、使用Spring的IOC功能管理SessionFactory对象

LocalSessionFactoryBean

2、使用Spring管理Session对象

HibernateTemplate

3、使用Spring的功能实现声明式的事务管理

整合Hibernate的步骤:

1、配置SessionFactory(可以自动完成)

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation"

value="classpath:hibernate.cfg.xml">

</property>

</bean>

2、配置HibernateTemplate,用于完成数据操作

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

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

</bean>

3、让Common继承HibernateDaoSupport类,该类提供了HibernateTemplate的getter和setter方法。

4、将hibernateTemplete注入到Common中

<bean id="common" class="com.aptech.common.Common">

<property name="hibernateTemplate" ref="hibernateTemplete"></property>

</bean>

5、将Common的方法修改成hibernateTemplete的操作。

package com.aptech.common;

import java.sql.SQLException;

import java.util.List;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.springframework.dao.DataAccessException;

import org.springframework.orm.hibernate3.HibernateCallback;

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

import com.aptech.exception.CommonException;

import com.aptech.htm.HibernateSessionFactory;

/**

* 通用类,不再负责事务处理

* 目标对象

* @author 李赞红

*

* @param <POJO>

*/

public class Common<POJO> extends HibernateDaoSupport implements ICommon<POJO> {

public void insertObject(POJO pojo) throws CommonException {

try {

this.getHibernateTemplate().save(pojo);

} catch (DataAccessException e) {

e.printStackTrace();

throw new CommonException(e);

}

}

public void updateObject(POJO pojo) throws CommonException {

try {

this.getHibernateTemplate().update(pojo);

} catch (DataAccessException e) {

e.printStackTrace();

throw new CommonException(e);

}

}

public void deleteObject(Class theClass, long id) throws CommonException {

try {

Object obj = this.getHibernateTemplate().load(theClass, id);

this.getHibernateTemplate().delete(obj);

} catch (DataAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new CommonException(e);

}

}

public POJO loadObject(Class theClass, long id) throws CommonException {

try {

Object obj = this.getHibernateTemplate().load(theClass, id);

return (POJO) obj;

} catch (DataAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new CommonException(e);

}

}

public List queryObjects(final String hql) throws CommonException {

class Hc implements HibernateCallback{

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

return session.createQuery(hql).list();

}

}

try {

return this.getHibernateTemplate().executeFind(new Hc());

} catch (DataAccessException e) {

e.printStackTrace();

throw new CommonException(e);

}

}

public List queryObjects(Class theClazz) throws CommonException {

return this.queryObjects("from " + theClazz.getSimpleName());

}

}

6、配置事务

<!-- 事务管理器,相当于TransactionProxy,定义事务的开启、提交、回滚 -->

<bean id="htm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory">

<ref bean="sessionFactory"/>

</property>

</bean>

<bean id="ti" class="org.springframework.transaction.interceptor.TransactionInterceptor">

<property name="transactionManager">

<ref bean="htm"/>

</property>

<property name="transactionAttributes">

<props>

<!-- key:方法名称 -->

<prop key="insert*">PROPAGATION_REQUIRED</prop>

<prop key="update*">PROPAGATION_REQUIRED</prop>

<prop key="delete*">PROPAGATION_REQUIRED</prop>

<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>

<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>

</props>

</property>

</bean>

<!-- 自动代理,代理业务对象 -->

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

<property name="beanNames">

<list>

<value>common</value>

</list>

</property>

<property name="interceptorNames">

<list>

<value>ti</value>

</list>

</property>

</bean>

7、将common注入Dao

<bean id="baseDao" abstract="true">

<property name="common">

<ref bean="common"/>

</property>

</bean>

<bean id="udao" class="com.aptech.dao.impl.UserDao" parent="baseDao"></bean>

<bean id="rdao" class="com.aptech.dao.impl.RoleDao" parent="baseDao"></bean>

8、将Dao注入Service

<bean id="grantService" class="com.aptech.service.impl.GrantService">

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

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

</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: