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

Spring配置Hibernate事务的三种方式

2016-03-31 20:22 567 查看
Spring配置Hibernate事务的三种方式:

使用事务代理工厂生成事务对象

使用AOP生成事务

使用注解生成事务

方法一:使用事务代理工厂生成事务对象

XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> 
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>

<!--********************** 下面为事务配置 ********************** -->

<!-- 配置Hibernate事务管理器 -->
<bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 事务的工厂bean -->
<bean id="proxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 指定对哪些接口生成代理 -->
<property name="proxyInterfaces">
<list>
<value>www.change.tm.springblank.service.UserService</value>
</list>
</property>
<!-- 指定事务管理器 -->
<property name="transactionManager" ref="tx"/>
<!-- 指定目标对象 -->
<property name="target" ref="userServiceImpl"/>
<!-- 指定哪些方法开启事务 -->
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

</beans>


UserServiceImpl服务层:

public class UserServiceImpl implements UserService{

private HibernateTemplate hibernateTemplate;

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

public UserServiceImpl() {
System.out.println("初始化");
}

@Override
public void save() {
hibernateTemplate.save(new User());
System.out.println("save");
}

}


测试类

public class UserServiceTest {
@Test
public void saveTest(){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml");
//注意 : getBean() 中,获取的id为proxy,事务的代理工厂
UserService userDao =
applicationContext.getBean("proxy", UserService.class);
userDao.save();
applicationContext.close();
}
}


方法二:使用AOP生成事务

XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> 
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>

<!--********************** 下面为事务配置 ********************** -->

<!-- 配置Hibernate事务管理器 -->
<bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 事务通知 -->
<tx:advice id="txAdvice" transaction-manager="tx">
<tx:attributes>
<!-- 适配所有的save..方法 -->
<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
<!-- 适配所有的get..方法,同时为只读模式(read-only) -->
<tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT"
read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- aop配置 -->
<aop:config>
<!-- 指定哪些类方法开启事务 -->
<!-- advice-ref : 指定切面通知 -->
<aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvice"/>
</aop:config>
</beans>


UserServiceImpl服务层

public class UserServiceImpl implements UserService{

private HibernateTemplate hibernateTemplate;

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

public UserServiceImpl() {
System.out.println("初始化");
}

@Override
public void save() {
hibernateTemplate.save(new User());
}
}


测试类

public class UserServiceTest {
@Test
public void saveTest(){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml");
UserService userDao =
applicationContext.getBean("userServiceImpl", UserService.class);
userDao.save();
applicationContext.close();
}
}


方法三:使用注解生成事务

XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> 
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>

<!--********************** 下面为事务配置 ********************** -->

<!-- 配置Hibernate事务管理器 -->
<bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 注解驱动的事务管理 , 需要指明事务管理器transaction-manager -->
<tx:annotation-driven transaction-manager="tx" />

</beans>


UserServiceImpl服务层

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)
public class UserServiceImpl implements UserService{

private HibernateTemplate hibernateTemplate;

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

public UserServiceImpl() {
System.out.println("初始化");
}

@Override
@Transactional(readOnly = false)
public void save() {
hibernateTemplate.save(new User());
}

}


测试类

public class UserServiceTest {
@Test
public void saveTest(){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml");
UserService userDao =
applicationContext.getBean("userServiceImpl", UserService.class);
userDao.save();
applicationContext.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: