mybatis通过foreach实现批量操作

MyBatis通过foreach实现批量操作及整合Spring Boot

1、问题概述?

本文主要讲述mybatis中通过forEache批量删除数据

批量操作并没有固定的办法,理论上只要能实现一次性操作多条数据,都叫批量操作,常见的批量操作可以采用如下功能办法:

1、使用编程语言中的for循环实现批量删除或添加等。

2、使用一些批处理框架如Spring Batch

3、使用一些ORM框架提供的批处理工具。

2、forEach批量操作使用

2.1、获取前端选中的数据集

前端数据封装成如下格式:既是数组类型的json字符串。

function test(){
  $.get("/test",{"ids":"[{\"id\":\"10002\"},{\"id\":\"10003\"}]"});

}

2.2、导入数组json解析包

<dependency>
	<groupId>com.alibaba.fastjson2</groupId>
	<artifactId>fastjson2</artifactId>
	<version>2.0.53</version>
</dependency>

2.3、后端接收数据并解析成List<String>集合。

import com.alibaba.fastjson2.JSONArray;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

@Controller
public class TestController {

    @RequestMapping("/test")
    @ResponseBody
    public void test(String ids) throws Exception{
        JSONArray listObjectThir = JSONArray.parseArray(ids);
        for(Object mapList : listObjectThir){
            for (Object entry : ((Map)mapList).entrySet()){
                System.out.println(((Map.Entry)entry).getKey()  + "<=键==值=>" +((Map.Entry)entry).getValue());
            }
        }
    }

}

2.4、创建StudentService业务类

@Service
public class StudentService{
  @AutoWired(required=false)
  private StudentMapper studentMapper;
  @AutoWired
  public List<Student> findByName(List<String> ids){
         Map<String,Object> map=new HashMap<>();
         map.put("ids",ids);
         studentMapper.findByName(map);
   }
}

2.5、创建mapper接口

public interface StudentMapper{

   public List<Student> find
### 使用 MyBatis 的 `<foreach>` 标签实现批量更新 在 MyBatis 中,可以通过 `<foreach>` 标签来处理集合类型的参数,并将其用于动态 SQL 构建。以下是基于提供的引用内容以及专业知识设计的一个完整的批量更新示例。 #### XML 配置文件中的 `<update>` 实现 以下是一个典型的批量更新配置: ```xml <update id="batchUpdate" parameterType="java.util.List"> UPDATE your_table SET column1 = (CASE id <foreach collection="list" item="item" index="index" separator=" " open="" close=""> WHEN #{item.id} THEN #{item.column1} </foreach> END), column2 = (CASE id <foreach collection="list" item="item" index="index" separator=" " open="" close=""> WHEN #{item.id} THEN #{item.column2} </foreach> END) WHERE id IN ( <foreach collection="list" item="item" open="(" separator="," close=")"> #{item.id} </foreach> ) </update> ``` 此代码片段通过嵌套的 `<foreach>` 来分别定义 `column1` 和 `column2` 的更新逻辑[^3]。外部的 `WHERE` 子句则利用另一个 `<foreach>` 动态生成符合条件的 ID 列表。 --- #### Java 接口方法签名 对应的 Mapper 接口中应声明如下方法: ```java public interface YourTableMapper { void batchUpdate(List<Item> items); } ``` 其中,`Item` 是一个简单的 POJO 类型,包含需要更新的字段(如 `id`, `column1`, `column2` 等)。 --- #### 测试数据准备 假设我们有一个名为 `your_table` 的数据库表,其结构如下: | id | column1 | column2 | |----|---------|---------| | 1 | valueA | valueX | | 2 | valueB | valueY | 如果要更新这些记录,则可以传递一个列表给上述接口方法: ```java List<Item> itemList = new ArrayList<>(); itemList.add(new Item(1, "newValueA", "newValueX")); itemList.add(new Item(2, "newValueB", "newValueY")); yourTableMapper.batchUpdate(itemList); ``` 以上代码会触发批量更新操作,将对应列的值修改为目标值[^3]。 --- #### 注意事项 1. **性能优化**:当涉及大量数据时,建议分批提交事务以减少内存占用并提高效率。 2. **SQL 注入防护**:始终使用 MyBatis 提供的安全绑定机制(即 `${}` 替代为 `#{}`),防止潜在安全风险。 3. **兼容性问题**:不同数据库可能对复杂查询的支持程度有所差异,请提前测试目标环境下的表现[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值