0


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>")voidinsertUsers(@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"}]

在这里插入图片描述

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

packagecom.gy;importcom.gy.domain.userInfo;importcom.gy.service.UserService;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;importjava.util.ArrayList;importjava.util.List;@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublicclass test {@AutowiredUserService userService;// 批量新增@Testpublicvoidtest01(){List<userInfo> userInfos =newArrayList<>();
        userInfos.add(newuserInfo(4,"XU",102.3));
        userInfos.add(newuserInfo(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>")voidupdateList(@Param("list")List<userInfo> userInfos);

测试类:

// 批量修改@Testpublicvoidtest04(){List<userInfo> userInfos =newArrayList<>();
        userInfos.add(newuserInfo(3,"NPL",1251.2));
        userInfos.add(newuserInfo(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参数详解:
在这里插入图片描述

标签: spring boot java junit

本文转载自: https://blog.csdn.net/m0_56188609/article/details/131062548
版权归原作者 new一个对象_ 所有, 如有侵权,请联系我们删除。

“SpringBoot中使用@Insert、@Update实现批量新增、更新”的评论:

还没有评论