Springboot中使用@Transactional完成事务一致性

背景:为了更好的测试,你就得更好地了解开发,为了更好的了解开发,你就知道开发常用框架,那就来吧,第一个springboot
目的:事务一致性
组网图:不涉及
工具:java version “1.8.0_65” ;Apache Maven 3.6.3;mysql-5.7.26;IDEA版本 2018.3 (准备步骤见本人其它博文);
简介:Springboot中使用@Transactional完成事务一致性,要么成功,要么失败
第一步:接上一篇,我们首先使用Navicat更改库的引擎为innodb
Springboot中使用@Transactional完成事务一致性_第1张图片
第二步:增加GirlsService这个类并使用@Transactional这个注解:
Springboot中使用@Transactional完成事务一致性_第2张图片

package com.hua.myfirst;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

@Service
public class GirlsService {
    @Autowired
    private GirlsRepository repository;

    @Transactional
    public void creatTwo() {
        Girls girlsOne = new Girls();
        girlsOne.setProducer("小三");
        girlsOne.setMoney(new BigDecimal("111"));
        repository.save(girlsOne);

        Girls girlsTwo = new Girls();
        girlsTwo.setProducer("小六");
        girlsTwo.setMoney(new BigDecimal("2222"));
        repository.save(girlsTwo);
    }
}

第三步:在GirlsController新增一个方法:
Springboot中使用@Transactional完成事务一致性_第3张图片

package com.hua.myfirst;


        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.*;

        import javax.xml.ws.Service;
        import java.math.BigDecimal;
        import java.util.List;
        import java.util.Optional;

@RestController
public class GirlsController {

    @Autowired
    private GirlsRepository repository;

    @Autowired
    private GirlsService service;

    //获取女孩列表
    @GetMapping("/girls")
    public List<Girls> list() {
        return repository.findAll();
    }

    //增加一个女孩
    @PostMapping("/girls")
    public Girls creat(@RequestParam("producer") String producer,
                       @RequestParam("money") BigDecimal money) {
        Girls girls = new Girls();
        girls.setProducer(producer);
        girls.setMoney(money);
        return repository.save(girls);
    }

    //通过id查询红包
    @GetMapping("/girls/{id}")
    public Girls findById(@PathVariable("id") Integer id) {
        return repository.findById(id).orElse(null);
    }

    //更新girls
    @PutMapping("/girls/{id}")
    public Girls update(@PathVariable("id") Integer id,
                        @RequestParam("consumer") String consumer) {
        Optional<Girls> optional = repository.findById(id);
        if (optional.isPresent()) {
            Girls girls = optional.get();
            girls.setConsumer(consumer);
            return repository.save(girls);
        }

        return null;
    }

    //删除girls
    @DeleteMapping("/girls/{id}")
    public String delete(@PathVariable("id") Integer id) {
        Optional<Girls> optional = repository.findById(id);
        if (optional.isPresent()) {
            repository.deleteById(id);
            return "delete success";
        }
        return "delete fail";
    }

    //事务,添加两个女孩,要么一起添加成功,要么一起失败
    @PostMapping("/girls/two")
    public void creareTwo() {
        service.creatTwo();
    }
}

使用postman进行测试。如下:
Springboot中使用@Transactional完成事务一致性_第4张图片
再去数据库查看数据是否添加成功:
Springboot中使用@Transactional完成事务一致性_第5张图片
第四步:修改数据库表结构,先删除之前插入的数据
Springboot中使用@Transactional完成事务一致性_第6张图片
修改表结构:
Springboot中使用@Transactional完成事务一致性_第7张图片
然后我们再次插入数据:
Springboot中使用@Transactional完成事务一致性_第8张图片
再去数据库查看数据是否添加成功:
Springboot中使用@Transactional完成事务一致性_第9张图片
没有插入成功,我们看一下控制台,执行两天插入语句,但是报错了:
Springboot中使用@Transactional完成事务一致性_第10张图片

你可能感兴趣的:(java学习)