一、使用@Insert批量新增

数据库原始表数据

数据层接口

// 批量新增

@Insert("")

void insertUsers(@Param("list") List userInfos);

注意:@Param(“list”) 引号中和foreach 中 collection 属性值必须写list,否则报错。item属性值写实体类的类名,首字母必须小写

接口测试: 由于在Apifox中是没有对应List的数据类型因此需要我们自己手写body形式 – json例如:

[

{ "id":4,

"money":"102.3",

"name":"XU"

},

{ "id":5,

"money":"289.64",

"name":"RC"

}

]

除了使用接口测试工具验证,我们还可以编写业务测试类进行测试:

package com.gy;

import com.gy.domain.userInfo;

import com.gy.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.ArrayList;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest

public class test {

@Autowired

UserService userService;

// 批量新增

@Test

public void test01(){

List userInfos =new ArrayList<>();

userInfos.add(new userInfo(4,"XU",102.3));

userInfos.add(new userInfo(5,"RC",289.64));

userService.insertUsers(userInfos);

}

}

使用以上两种方式均可进行测试验证,此时数据均被批量新增成功!!!

二、使用@Update批量更新

数据库原始表数据见上图

数据层接口:

// 批量更新

@Update("")

void updateList(@Param("list") List userInfos);

测试类:

// 批量修改

@Test

public void test04(){

List userInfos =new ArrayList<>();

userInfos.add(new userInfo(3,"NPL",1251.2));

userInfos.add(new userInfo(4,"LL",37.64));

userService.updateList(userInfos);

List infos = userService.getAll();

System.out.println(infos);

}

此处需注意踩坑(本人在此处解决问题时耗费较长时间) 测试运行后出现报错信息,提示大概为sql语法出现异常,然而多次排查各种(数据库、字段、表名等等…)问题均无果 发现sql能够在navicat上面正常的运行,于是就只有看配置。后来了解到了批量必然要执行多行sql。但是mybatis默认是不开启多行sql执行的,于是修改配置,开启MySQL多行sql执行。

url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&allowMultiQueries = true

开启多行sql执行:在数据库连接信息配置中 url后面加上:`allowMultiQueries = true

可以看到上诉问题立刻得到了解决☺

mysql的url参数详解:

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: