Java-----事务(特性 概念 隔离级别 如何使用)

事务是个什么玩意?

事务是指程序中一系列严密的逻辑操作 它比较出众 它的所有操作必须全部成功完成才能够行 要不然 所作的所有更改都会被撤销 大白话就是 好几件事情当作一件事情来处理,要么一块活 要么其中有一个死了(出现异常)也要拉几个垫背的
spring事务管理包含两种情况,编程式事务 .声明式事务。声明式事务包括基于注解@Transactional+aop的方式。编程式事务使用TransactionTemplate获取PlatformTransactionmanager。对于编程式事务spring呢推荐Transactiontemplate

事务的四个特性是什么?

  • 原子性 :事务开始后所有的操作,要么全部做完,要么全部不做,不可能卡在中间环节。事务执行过程中出错,会回滚到事务开始前的状态(大白话就是 一个皮筋 你拉着她 它在伸长 也在改变 突然发力者手抽筋了 它又恢复到了原来的状态 )

  • 一致性:事务开始前和结束后 数据库的完整约束没有被破坏(大白话就是 两个表 A账户 B账户 A>>B. 转账 B收款成功。 可是A也得把他自己转出去的钱也得扣了 这就是一致性)

  • 隔离性:同一时间,只允许一个事物请求同一数据,不同的事务之间彼此没有任何干扰。(大白话就是 我拿起手机 打好字 准备发送消息 然后点击发送 等待发送成功。 在我媳妇没有接收消息的过程中,任何人不能对我媳妇发消息)

  • 持久性:事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

事务的隔离级别

在这里插入图片描述
Springboot如何使用事务

  1. 在启动类上加上@EnableTransactionManagement--------也就是拥有@SpringBootApplication注解的那个类
  2. 在接口实现类的方法上加上@Transaction 就完事

SpringMvc如何使用事务

**

- 编程式事务

**
特性---------》他是PlatformTransactionManager接口的儿子 意思就是说他是继承自这个Platfortransationmanager接口
编程式事务TransactionTemplate需要手动在代码中处理事务,还是最好不要使用,不符合spring的思想,因为他直接耦合代码。
第一步。
配置transactionmanager (大白话就是在配置文件上给一个类创建一个bean class为DataSourceTransactionManager的Bean 他有一个属性 就是 datasource 当然 也得给他整一个数据源(额外创建一个数据源Bean)把数据源id放在ref上边 完事 事务管理器配置完成 对 别忘记配置id )
第二步。
配置transactionTemplate(大白话就是给一个类创建一个TransactionTemplate的Bean 他有一个属性是transactonManager 当然 他的属性transactionManager 的值为第一步的id)
第三步。
搞业务代码
1.注入一个transactiontemplate对象(注入—》@Autowired
@Qualifier @Resource)
2.例子

 @Autowired
    private TransactionTemplate transactionTemplate;

    public int insertUser2(final User user) {
        Integer i= (Integer) this.transactionTemplate.execute(new TransactionCallback() {
            public Object doInTransaction(TransactionStatus transactionStatus) {

                int i = userMapper.insertUser(user);
                if (i > 0) {
                    System.out.println("success");
                }
                int j = 10 / 0;

                return i;

            }
        });

        return i;
    }

基于Transactional注解的事务管理

  1. 配置事务管理器的bean
    使用<tx:annotation-driven transaction-manager=“事务管理器ID”/>
    别忘记启动注解哦 < mvc:annotation-driven/>
  2. 配置后再需要处理的地方加上@Transactional注解 这个注解也可以应用到类上,也可以应用到方法上,当然 只针对public方法 (也就是只针对于全局方法)

版权声明:本文为qq_43792118原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。