SpringBoot中@Insert、@Update实现批量新增更新的使用示例
一、使用@Insert批量新增
数据库原始表数据
数据层接口
// 批量新增 @Insert("<script>" + "INSERT INTO userInfo" + " (id,name,money)" + " VALUES" + " <foreach collection ='list' item='userInfo' separator =','>" + " (#{userInfo.id}, #{userInfo.name}, #{userInfo.money})" + " </foreach >" + "</script>") void insertUsers(@Param("list") List<userInfo> 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<userInfo> userInfos =new ArrayList<>(); userInfos.add(new userInfo(4,"XU",102.3)); userInfos.add(new userInfo(5,"RC",289.64)); userService.insertUsers(userInfos); } }
使用以上两种方式均可进行测试验证,此时数据均被批量新增成功!!!
二、使用@Update批量更新
数据库原始表数据见上图
数据层接口:
// 批量更新 @Update("<script>" + " <foreach collection ='list' item='userInfo' separator =';'>" + "update userInfo set name=#{userInfo.name},money=#{userInfo.money} where id=#{userInfo.id}" + "</foreach>" + "</script>") void updateList(@Param("list") List<userInfo> userInfos);
测试类:
// 批量修改 @Test public void test04(){ List<userInfo> userInfos =new ArrayList<>(); userInfos.add(new userInfo(3,"NPL",1251.2)); userInfos.add(new userInfo(4,"LL",37.64)); userService.updateList(userInfos); List<userInfo> 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参数详解:
到此这篇关于SpringBoot中@Insert、@Update实现批量新增更新的使用示例的文章就介绍到这了,更多相关SpringBoot @Insert、@Update批量新增更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
RocketMQ生产者一个应用不能发送多个NameServer消息解决
这篇文章主要为大家介绍了RocketMQ生产者一个应用不能发送多个NameServer消息原因及解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11使用Spring @DependsOn控制bean加载顺序的实例
这篇文章主要介绍了使用Spring @DependsOn控制bean加载顺序的实例讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07基于ElasticSearch Analyzer的使用规则详解
这篇文章主要介绍了基于ElasticSearch Analyzer的使用规则,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07springboot学习之Thymeleaf模板引擎及原理介绍
本文主要介绍一下SpringBoot给我们推荐的Thymeleaf模板引擎,这模板引擎呢,是一个高级语言的模板引擎,他的这个语法更简单而且功能更强大,对springboot Thymeleaf模板引擎相关知识感兴趣的朋友一起看看吧2022-02-02
最新评论