本文内容:如何在springboot 中实现事务处理。

1

添加依赖

Springboot 中实现事务处理并不需要额外的 jar 包,只需要基本的数据库访问包。

    org.mybatis.spring.boot    mybatis-spring-boot-starter    1.3.2    mysql    mysql-connector-java    8.0.13

2

开启事务

在启动类上添加注解@EnableTransactionManagement

@SpringBootApplication@EnableTransactionManagementpublic class HotelingSystemApplication {  public static void main(String[] args) {    SpringApplication.run(HotelingSystemApplication.class, args);  }}

3

事务注解

事务注解@Transactional 只能写在 Service 层上才会生效,如果在控制层进行事务注解将不起作用。

@Servicepublic class BookServiceImpl implements BookService{  @Autowired  private BookMapper bookMapper;  @Autowired  private OldbookMapper oldBookMapper;  @Transactional  public void deleteById(Integer bookid) {    Book book=bookMapper.selectByPrimaryKey(bookid);    bookMapper.deleteByPrimaryKey(bookid);    Oldbook oldbook=new Oldbook(book.getRoomid(), book.getGuestid(), book.getCustomerid(), book.getStartday(), book.getEndday());    oldBookMapper.insert(oldbook);  }}

4

事务不生效怎么办?

事务不生效主要有以下几个原因:

  1. mysql表不支持事务,引擎应为 Innodb。

  2. 启动类上没有加入@EnableTransactionManagement 注解。

  3. 方法不为 public 修饰。

  4. @Transactional注解默认只能拦截RuntimeException和Error,如果是自定义的Exception,需要设置rollbackFor属性值。

5

如何修改引擎?

针对事务不生效的第一个原因,即数据库表引擎不支持事务,我们该怎么将其修改为 Innodb 引擎?

登录数据库管理系统,并进入你想修改的数据库

选择事务涉及的数据库表

在菜单栏处点击【操作】按钮,在【表选项】区域修改存储引擎

Springboot 事务处理_第1张图片

至此,本文结束。欢迎各位关注我的公众号:暗星涌动。