SpringBoot数据层测试事务回滚的实现流程

目录
  • 数据层测试事务回滚
    • dao下
    • pojo对象
    • service
  • 测试用例数据设定

数据层测试事务回滚

pom.xml导入对应的一些坐标,mysql,Mp,等

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

dao下

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pojo.Person;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Mapper//使用注解配置映射
@Component//给spring管理,方便注入
public interface PersonDao extends BaseMapper<Person> {
}

pojo对象

package com.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("tb_user")
public class Person {
private Long id;
private String username;
private String password;
private String gender;
private String addr;
}

service

package com.service;
        import com.baomidou.mybatisplus.core.metadata.IPage;
        import com.baomidou.mybatisplus.extension.service.IService;
        import com.pojo.Person;
public interface PersonService extends IService<Person> {
}

serviceImpl

@Service
public class PersonServiceImpl extends ServiceImpl<PersonDao, Person> implements PersonService {
}

PersonServiceTest类下

package com.serviceTest;
import com.pojo.Person;
import com.service.PersonService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
@SpringBootTest
@Transactional
@Rollback(false)
public class PersonServiceTest {
    @Autowired
    private PersonService personService;
    @Test
    void testAdd(){
        Person person = new Person();
        person.setUsername("测试回滚2");
        person.setPassword("1");
        person.setGender("1");
        person.setAddr("1");
        System.out.println(personService.save(person));
    }
}

加上@Transactional运行

加上@Transactional和@Rollback(false)运行

为了测试用例添加事务,加上@Transactional,SpringBoot会对测试用例对应的事务提交操作进行回滚,也就是springboot识别到这个是test,所以不会进行提交事务,但是会占用id。不会有数据显示。

如果想在测试用例中提交事务,可以通过@Rollback(false),不回滚,默认值是true,加上false就不会回滚,测试数据就能在数据库中显示出来。

测试用例数据设定

测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数位器赋值

${random.int}表示随机整数

${random.int(10)}表示10以内的随机数

${random.int(10,20)}表示10到20的随机数

其中()可以是任意字符,如[ ],@@都可以。

配置文件下

personRandom:
  age: ${random.int(1,100)}
  name: ${random.value}
  detail: ${random.uuid}

定义一个类接收

@Data
@Component//给spring管理
@ConfigurationProperties(prefix = "personrandom")
public class  Person {
    private String  name;
    private String  age;
    private String  detail;
}

测试类下

@SpringBootTest
public class RandomTest {
@Autowired
    private Person person;
    @Test
    public void KC(){
        System.out.println(person);
    }
}

运行结果

到此这篇关于SpringBoot数据层测试事务回滚的实现流程的文章就介绍到这了,更多相关SpringBoot事务回滚内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用SpringBoot注解方式处理事务回滚实现

    我们在SpringBoot和MyBatis整合的时候,需要在SpringBoot中通过注解方式配置事务回滚 1 Pojo类 package com.zxf.domain; import java.util.Date; public class User { private Integer id; private String name; private String pwd; private String head_img; private String phone; private Date

  • SpringBoot深入刨析数据层技术

    目录 前置导入 数据源技术 持久化技术 数据库技术 前置导入 之前做SSMP整合的时候数据层解决方案涉及到了,MySQL数据库与MyBatisPlus框架,后面又涉及到了Druid数据源的配置,所以现在数据层解决方案可以说是Mysql+Druid+MyBatisPlus.而三个技术分别对应了数据层操作的三个层面: 数据源技术:Druid 持久化技术:MyBatisPlus 数据库技术:MySQL ​ 下面的研究就分为三个层面进行研究,对应上面列出的三个方面,咱们就从第一个数据源技术开始说起. 数

  • SpringBoot数据层测试事务回滚的实现流程

    目录 数据层测试事务回滚 dao下 pojo对象 service 测试用例数据设定 数据层测试事务回滚 pom.xml导入对应的一些坐标,mysql,Mp,等 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </depende

  • springboot使用mybatis开启事务回滚

    目录 1.前言 2.操作 (1)提前配置好spring boot + mybatis (2)导入依赖包 (3)启动类开启事务管理 3.测试 (1)父级方法不开启事务,子级开启,让子级方法触发异常 (2)恢复数据库表信息 (3)恢复数据库表信息 (5)恢复数据库 (7)恢复数据库,删除子级方法事务注解,即关闭子级事务,父即开启事务 (8)如果子级方法不触发异常,而是在父级触发,那么子级方法是否会回滚? 1.前言 以前没有使用mybatis,可以关闭自动提交,然后做sql操作,对操作进行catch捕

  • Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍

    1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 代码如下: ed_user = User('ed', 'Ed Jones', 'edspassword')session.add(ed_user) 上面两段代码执行完后对象持久化了么?你或许会兴冲冲的跑去数据库里查看,结果却失望而归--数据库里什么都没有.为什么呢?因为SQLAlchemy采取的是

  • springboot手动事务回滚的实现代码

    亲测在使用@Transactional.@Transactional(rollbackFor = Exception.class)及catch异常之后 throw new RuntimeException();仍然不能解决线程中的事务回滚.下面使用线程所机制,进行整体的事务提交及事务回滚,代码如下: 在springboot启动类上加  @EnableTransactionManagement  注解 线程类中添加以下代码 @Autowired private PlatformTransactio

  • java事务回滚失败问题分析

    Spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起. 那么什么是检查型异常什么又是非检查型异常呢? 最简单的判断点有两个: 1.继承自RuntimeException或Error的是非检查型异常,而继承自Exception的则是检查型异常(当然,RuntimeException本身也是Exception的子类). 2.对非检查型类异常可以不用捕获,

  • MySQL 主从同步,事务回滚的实现原理

    BinLog BinLog是记录所有数据库表结构变更(例如create.alter table)以及表数据修改(insert.update.delete)的二进制日志,主从数据库同步用到的都是BinLog文件.BinLog日志文件有三种模式. STATEMENT 模式 内容:binlog 只会记录引起数据变更的 sql 语句 优势:该模式下,因为没有记录实际的数据,所以日志量和 IO 都消耗很低,性能是最优的 劣势:但有些操作并不是确定的,比如 uuid() 函数会随机产生唯一标识,当依赖 bi

  • Java多线程事务回滚@Transactional失效处理方案

    目录 背景介绍 公用的类和方法 示例事务不成功操作 使用sqlSession控制手动提交事务 背景介绍 1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚. 2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常

  • Java Spring 事务回滚详解

    spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); } 期待的情况:发生错误之前的所有数据库保存操作都回滚,即不保存 正常情况:前面的数据库操作会被执行,而发生数据库操作错

  • mongoDB 4.0事务回滚的辛酸历程探究

    前言 主管前几天发现mongoDB已经升级到4.0了,迫不及待得让我实现他期待已久的事务回滚,发现还是有很多坑啊! 下面是我将已有的本地mongoDB升级到支持事务回滚的历程,分享出来,有错误的地方欢迎指正! 以mac为例哈 部署mongodb事务回滚 1.准备工作 升级mongodb至4.0.0 $ brew upgrade mongodb 升级或安装mongodb.js v3.1.0 以上 $ npm i mongodb --save-dev 坑 升级完上述后,db.js里连接mongo时,

随机推荐