测试之@Sql(自动插入sql脚本,测试后销毁)

这篇具有很好参考价值的文章主要介绍了测试之@Sql(自动插入sql脚本,测试后销毁)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

@Sql

@SqlConfig

@SqlMergeMode

@Transactional

案例

参考自:


前言

解决测试时测试数据写入与销毁不方便,使用@Sql自动导入sql脚本语句,结合@Transactional事务回滚实现测试后数据销毁,便捷测试。

@Sql

@Sql注解可以执行SQL脚本,也可以执行SQL语句。它既可以加上类上面,也可以加在方法上面。 默认情况下,方法上的@Sql注解会覆盖类上的@Sql注解,但可以通过@SqlMergeMode注解来修改此默认行为。

@Sql有下面的属性:

 config:配置@SqlConfig,它的作用域是其@Sql注释的本地范围。它用于配置commentPrefix、分隔符等。
 ​
 executionPhase:决定何时执行SQL脚本和语句。默认是BEFORE_TEST_METHOD。
 ​
 statements:配置执行内联SQL语句。
 ​
 scripts:配置SQL脚本执行的路径。
 ​
 value:脚本元素的别名。脚本和值不能一起使用,但可以与statement元素一起使用。

@SqlConfig

用于配置如何去解释@Sql注解中指定的Sql脚本。 可以用于类上,也可以用于方法上。 @Sql注解也有一个config属性,作用与@SqlConfig相同,不同的是作用域只在对应的@Sql注解范围。它的优先级也大于类注解的

 blockCommentStartDelimiter:多行注释开始字符,默认是/*。
 ​
 blockCommentEndDelimiter:多行注释结束字符,默认是*/。
 ​
 commentPrefix:单行注释前缀,默认是–。
 ​
 commentPrefixes:指定多个单行注释前缀,默认是["–"]。
 ​
 dataSource:指定脚本执行的数据库的名字,只有在多个数据源时需要指定。
 ​
 encoding:指定sql脚本文件的字符编码。
 ​
 errorMode:配置错误模式,默认是SqlConfig.ErrorMode的DEFAULT。
 ​
 separator:配置脚本语句分隔符,默认是’\n’。
 ​
 transactionManager:指定transactionManager bean,只有有多个transactionManager时需要指定。
 ​
 transactionMode:指定脚本执行的事务模式,默认是SqlConfig.TransactionMode的DEFAULT。

@SqlMergeMode

@SqlMergeMode可以加在类上,也可以加在方法上。用于指示方法上的@Sql和类上@Sql注解配置是否合并。方法上的@SqlMergeMode注解优先级更高。默认值是SqlMergeMode.MergeModeOVERRIDE

@Transactional

需要开启事务注解,这样测试中添加的数据会在测试后自动销毁,便于多次测试。

该注解需要在启动类处配置开启事务允许@EnableTransactionManagement

案例

sql:

 CREATE TABLE `user` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(50) DEFAULT NULL,
   `password` varchar(50) DEFAULT NULL,
   `name` varchar(50) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
 ​
 ​
 INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
 INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

测试时插入的脚本语句user.sql:

 insert into user values (3,"wangwu","12343","王五");

Controller:

 import java.util.List;
 ​
 @RestController
 public class UserController {
 ​
     @Autowired
     private UserService userService;
 ​
     @PostMapping("/hello")
     public List<UserEntity> getList(){
         return userService.list();
     }
 ​
 }

test(以验证@Sql与回滚功能为主):

 @RunWith(SpringRunner.class)
 @SpringBootTest
 @Transactional
 @AutoConfigureMockMvc
 @Sql(scripts = "/user.sql")
 //@SqlConfig(encoding = "UTF-8")
 class UserControllerTest {
 ​
     @Autowired
     MockMvc mockMvc;
 ​
     @Test
     void getList() throws Exception {
         MvcResult mvcResult = mockMvc.perform(post("/hello")).andReturn();
 ​
         MockHttpServletResponse response = mvcResult.getResponse();
         response.setCharacterEncoding("UTF-8");
         String JsonReturn = response.getContentAsString();
 ​
         // json转List
         List<UserEntity> userEntity = new ObjectMapper().readValue(JsonReturn,
                                                  new TypeReference<List<UserEntity>>(){});
         userEntity.forEach(System.out::println);
 ​
     }
 ​
 }

result:

 UserEntity(id=1, username=zhangsan, password=123, name=张三)
 UserEntity(id=2, username=lisi, password=123, name=李四)
 UserEntity(id=3, username=wangwu, password=12343, name=王五)

而数据库内不会出现新记录:

测试之@Sql(自动插入sql脚本,测试后销毁)

参考自:

Spring 单元测试中使用@Sql准备数据_xiegwei的博客-CSDN博客_单元测试数据库数据准备

@Sql Example in Spring Test (concretepage.com)

推荐直接点进注解定义处看不同属性的注释说明。

英语基础较差推荐使用

  • 有道词典(划词翻译)

  • idea插件Translation

测试之@Sql(自动插入sql脚本,测试后销毁)

划词右键:

测试之@Sql(自动插入sql脚本,测试后销毁)

 测试之@Sql(自动插入sql脚本,测试后销毁)文章来源地址https://www.toymoban.com/news/detail-404154.html

到了这里,关于测试之@Sql(自动插入sql脚本,测试后销毁)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL——插入已经存在的数据

    现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试插入它。 Filed Type Null Key Extra Default Comment id int(11) NO PRI auto_increment (NULL) 自增ID e

    2024年02月06日
    浏览(23)
  • SQL学习十二、插入数据

    前面学习记录的都是查询数据,那些也是SQL中最常用的语句,这篇我们来学习和积累一下相数据库中插入数据的SQL。 另外,需要注意的是,很多数据库对查询操作要求的权限可能低一些,但是对于插入、修改、删除等操作都需要较高的权限。 1、插入完整的行 例如我们需要插

    2023年04月08日
    浏览(21)
  • SQL Server向表中插入数据

    切换到对应的数据库 插入数据 方式1 注意: 列名就算是字符类型也不用加引号,数据如果对应的字段是字符串类型,需要加引号包裹起来 可以自动增长的字段是可以不用管的(如DepartmentId int primary key identity(1,1)这里就设置了自增,所以在下面的插入中没有该字段 执行完成之

    2024年02月04日
    浏览(46)
  • SQL 50 题(MySQL 版,包括建库建表、插入数据等完整过程,适合复习 SQL 知识点)

    ① 本文整理了经典的 50 道 SQL 题目,文本分为 建库建表 、 插入数据 以及 SQL 50 题 这三个部分。 ② 这些题目许多博主也整理过,但本人不太了解这些题目具体的出处。第一次了解这些题目是本科期间老师出的题目。如果有网友知道这些题目的最原始出处,可以在评论评论区

    2024年02月07日
    浏览(32)
  • SQL - 将查询结果插入到另一张表中

    注意:字段必须一致(位置一致,类型一致),否则会出现数据转换错误。 例如,要将 test 表插入到 newTest 表中,则可以通过如下SQL语句实现: 使用场景: 从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。

    2024年02月16日
    浏览(34)
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

    SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句: 指定要插入的列名和值: 如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这种情况下,INSERT INTO 语法如下: 演示数据库 以

    2024年02月05日
    浏览(49)
  • mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器

    分类 : 脚本动态SQL :XML配置方式的动态SQL,是用 script 的方式把它照搬过来,用注解来实现。适用于xml配置转换到注解配置 方法中构建SQL :@SelectProvider 、@InsertProvider、@UpdateProvider、@DeleteProvider 这些方法的使用 SQL语句构造器 :实现动态 SQL 的内容 脚本动态SQL 在sql语句中加

    2024年01月21日
    浏览(40)
  • JPA使用nativeQuery自定义SQL怎么插入一个对象参数呢?

    0、我们在前后端传递数据时候,参数多的情况下,常常将这些参数封装成对象;当有些场景你需要使用JPA nativeQuery自定义SQL,要将这个对象insert时候,初学者似乎有点犯难,jpa不是spring-data项目的内容吗,所以在sql中也是支持SPEL表达式来获取参数,运用这个思路可以继续 1、

    2024年02月14日
    浏览(30)
  • dbeaver导入sql脚本

       然后按确定就行了  

    2024年02月11日
    浏览(30)
  • DBeaver SQL脚本执行配置

    对生产环境数据迁移到测试环境时,单条执行可能时间过长、或者内存装不下。最快的方法是执行SQL脚本。 本地数据库客户端:DBeaver 该客户端是不自带脚本执行客户端的,如下图: mysql官网下载workbench,可以连通客户端执行组件一起下载下来:MySQL :: Download MySQL Workbench 之后

    2024年01月17日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包