SpringBoot-使用事务

前言

  • 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
  • 事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。
  • springboot开启事务很简单,只需要一个注解@Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器。

配置文件application.yml

本文使用的是之前整合JPA的文章,具体可以参考 SpringBoot 整合JPA。这里的jpa配置略微不同,原因是需要指定数据库引擎为InnoDB,否则不能使用事务。

spring:
  #数据库配置
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

  ##validate  加载hibernate时,验证创建数据库表结构
  ##create   每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
  ##create-drop        加载hibernate时创建,退出是删除表结构
  ##update                 加载hibernate自动更新数据库结构
  ##validate 启动时验证表的结构,不会创建表
  ##none  启动时不做任何操作
  #jpa配置
  jpa:
    show-sql: true
    properties:
      hibernate:
        hbm2ddl:
          auto: create
#        指定数据库引擎,用于使用事务
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect

#端口号(可不配置,默认为8080)
server:
  port: 8080

创建controller类

  • 这里的会抛出 Data truncation: Data too long for column ‘house_name’ at row 1(数据过长异常),用于测试事务。
  • @Transactional:打开一个事务。加在类上所有方法添加事务,一般不这样用。
@RestController
public class HouseController {

    @Autowired
    private HouseRepository houseRepository;

    @GetMapping("/test1")
    public String test1() {
        houseRepository.save(new House("house1", "100平方米"));
        houseRepository.save(new House("house2", "100平方米"));
        houseRepository.save(new House("house3", "100平方米"));
        houseRepository.save(new House("house444444444", "100平方米"));
        houseRepository.save(new House("house5", "100平方米"));
        return "success";
    }

    @GetMapping("/test2")
    @Transactional
    public String test2() {
        houseRepository.save(new House("house6", "100平方米"));
        houseRepository.save(new House("house7", "100平方米"));
        houseRepository.save(new House("house8", "100平方米"));
        houseRepository.save(new House("house999999999", "100平方米"));
        houseRepository.save(new House("house10", "100平方米"));
        return "success";
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值