读书人

Spring治理Hibernate事务[转]

发布时间: 2012-07-03 13:37:43 作者: rapoo

Spring管理Hibernate事务[转]

1.TransactionProxyFactoryBean

?

<?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:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <bean id="sessionFactory"        value="classpath:hibernate.cfg.xml">        </property>    </bean>    <bean id="TblUserDAO" />        </property>    </bean>    <!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用 -->    <bean id="transactionManager"        />        </property>    </bean>    <bean id="TblUserDAOProxy"        />        </property>        <property name="target">            <ref local="TblUserDAO" />        </property>        <property name="transactionAttributes">            <props>                <!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->                <prop key="*">PROPAGATION_REQUIRED</prop>            </props>        </property>    </bean></beans>

?

?2.TransactionInterceptior

?

<?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:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <bean id="sessionFactory"        value="classpath:hibernate.cfg.xml">        </property>    </bean>    <bean id="tblUserDAO" />        </property>    </bean>    <bean id="tblUserService" />        </property>    </bean>    <!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用 -->    <bean id="transactionManager"        />        </property>    </bean>    <bean        ref="transactionManager" />        <property name="transactionAttributes">            <props>                <!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->                <prop key="*">PROPAGATION_REQUIRED</prop>            </props>        </property>    </bean></beans>

?

3.AOP和TX配置

?

<?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:p="http://www.springframework.org/schema/p"    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-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">    <bean id="sessionFactory"        value="classpath:hibernate.cfg.xml">        </property>    </bean>    <bean id="tblUserDAO" />        </property>    </bean>    <bean id="tblUserService" />        </property>    </bean>    <!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用 -->    <bean id="transactionManager"        />        </property>    </bean>    <!-- 需要引入aop的命名空间 -->    <aop:config>        <!-- 切入点指明了在执行Service的所有方法时产生事务拦截操作 -->        <aop:pointcut id="daoMethods"            expression="execution(* com.angi.dao.service.TblUserService.*(..))" />        <!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->        <aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" />    </aop:config>    <!-- 需要引入tx的命名空间 -->    <!-- 这是事务通知操作,使用的事务管理器引用自 transactionManager -->    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <!-- 指定哪些方法需要加入事务,这里懒惰一下全部加入,可以使用通配符来只加入需要的方法 -->            <tx:method name="*" propagation="REQUIRED" />        </tx:attributes>    </tx:advice></beans>

?

4.anotation

?

<?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:p="http://www.springframework.org/schema/p"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">    <!-- 需要引入tx的命名空间 -->    <tx:annotation-driven transaction-manager="transactionManager" />    <bean id="sessionFactory"        value="classpath:hibernate.cfg.xml">        </property>    </bean>    <bean id="tblUserDAO" />        </property>    </bean>    <bean id="tblUserService" />        </property>    </bean>    <!-- 声明一个 Hibernate3 的事务管理器供代理类自动管理事务用 -->    <bean id="transactionManager"        />        </property>    </bean></beans>

?

@Transactional    public void doTransaction() {        // step1 insert        TblUser tblUser1 = new TblUser();        tblUser1.setId(24);        tblUser1.setUsername("Angi12");        tblUser1.setPassword("Wang21");        tblUserDAO.save(tblUser1);        // step2 update        TblUser tblUser2 = tblUserDAO.findById(2);        tblUser2.setPassword(tblUser2.getPassword() + "a");        tblUserDAO.update(tblUser2);        // step3 insert        TblUser tblUser = new TblUser();        tblUser.setId(23);        tblUser.setUsername("Angi");        tblUser.setPassword("Wang");        tblUserDAO.save(tblUser);    }
?

转至http://www.cnblogs.com/Angi/articles/2007552.html

读书人网 >开源软件

热点推荐