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

Spring-声明式事物(十一)

时间:2019-08-06 00:24:33      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:xmla   tis   artifact   users   逻辑   enc   exe   insert   col   

事务

事务:要么都成功!要么都不成功!

事务四大特性:ACID :原子性、一致性、隔离性、持久性。

声明式事务

Spring支持两种事务处理机制:

编程式事务:把所有事务的代码写在业务中;

声明式事务:使用AOP横切进去;一般都会使用声明式事务

要开启 Spring 的事务处理功能,在 Spring 的配置文件中创建一个dataSourceTransactionManager对象:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <constructor-arg ref="dataSource" />
</bean>

使用Spring进行事务通知,需要导入约束文件:tx

事务传播的级别:

Propagation :

  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 

Spring配置事物


 1.导包AOP

  <!--aop织入包-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>

2.业务逻辑

   public List<User> selectAllUser() {
        UserDao mapper = sqlSession.getMapper(UserDao.class);
       User user = new User(3, "maomao", "123321");
       mapper.add(user);
       mapper.delete(5);

        return mapper.selectAllUser();

    }

3.mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.west.dao.UserDao">

    <select id="selectAllUser" resultType="org.west.pojo.User">
        select *from user
    </select>

    <insert id="add" parameterType="org.west.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd})
</insert>

<delete id="delete" parameterType="int">
        delete from mybatis.user where id=#{id}
    </delete>

</mapper>

4.配置事务管理器,参数需要一个数据源;

    <!--需要配置一个事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <constructor-arg ref="dataSource"/>
</bean>

5.配置声明事务通知

<!--配置声明事物通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--name:指的是给那些发放添加事务
            propagation:事务的级别,一般选择这个REQUIRED,如果有事务
            就用这个事务,没有事务就创建一个事务-->
            <tx:method name="add" propagation="REQUIRED"/>
            <tx:method name="delete" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

6.配置aop织入事务

<aop:config>
        <!--切入点-->
        <aop:pointcut id="pointCut" expression="execution(* org.west.dao.UserDaoImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
    </aop:config>

7.测试类

public class Testya {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDaoImpl = (UserDao) context.getBean("userDaoImpl");
        List<User> users = userDaoImpl.selectAllUser();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

 

 

Spring-声明式事物(十一)

标签:xmla   tis   artifact   users   逻辑   enc   exe   insert   col   

原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/11306454.html

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