java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot @Insert、@Update批量新增更新

SpringBoot中@Insert、@Update实现批量新增更新的使用示例

作者:new一个对象_

本文主要介绍了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批量新增更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文