今天给大家介绍如何在Spring Boot中开启事务,希望大家喜欢。
说到事务,那什么是事务呢?

事务(Transaction),一般是指要做的或所做的事情。

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

那么如何在Spring Boot中使用呢?其实只需要两步即可:

  1. 在Application上添加@EnableTransactionManagement注解,用来开启事务。
  2. 在Service实现类的方法上添加@Transactional注解。

具体实现:
使用《Spring Boot中使用MyBatis详解》的代码,在TransactionalApplication启动类上添加@EnableTransactionManagement注解开启事务:

package com.zxw.transactional;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
//开启事务
@EnableTransactionManagement
public class TransactionalApplication {

    public static void main(String[] args) {
        SpringApplication.run(TransactionalApplication.class, args);
    }

}

在Service实现方法上添加@Transactional注解:

package com.zxw.transactional.controller;

import com.zxw.transactional.bean.PoetryBean;
import com.zxw.transactional.service.PoetryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class PoetryController {

    @Autowired
    private PoetryService poetryService;

    @Transactional
    @PostMapping("/register")
    public String registerVerse(PoetryBean poetryBean) {
        poetryService.addVerse(poetryBean);
        int i = 3 / 0;
        poetryService.addVerse(poetryBean);
        return "success";
    }
}

我在registerVerse方法添加了int i = 3 / 0;的代码,这段代码肯定会报错,在加了@Transactional注解后,我们看下可以往数据库插入几条数据?如果把@Transactional注解去掉又能添加几条呢?大家可以试试。

项目地址:HelloSpringBoot