zoukankan      html  css  js  c++  java
  • Spring-声明式事物(十一)

    事务

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

    事务四大特性: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);
            }
        }
    }

     

  • 相关阅读:
    Hadoop-CDH源码编译
    HBase框架基础(四)
    HBase框架基础(三)
    Scala基础简述
    HBase框架基础(一)
    NOI2015 软件包管理器
    可持久化数据结构入门
    树链剖分 入门
    NOIP2009 最优贸易
    高斯消元 模板
  • 原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/11306454.html
Copyright © 2011-2022 走看看