1. 批量插入

Mapper层:

int insertList(List<UsersModel> list);

对应的mapper.xml

<!--批量插入信息-->
<insert id="insertList" parameterType="java.util.List">
insert into users(
id, name
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}
)
</foreach>
</insert>

如果List数据量比较大,可以考虑将List分批次插入

2. 批量更新:

批量更新只提供更新单个字段的,因为更新多个字段无论哪种批量更新方案,我都用起来很不舒服,所以不做提供。

Mapper层:

int updateList(List<AgentApply> list);

对应的mapper.xml:

<!--批量更新-->
<update id="updateList" parameterType="java.util.List">
update agent_apply
set apply_time=
<foreach collection="list" item="item" index="index"
separator=" " open="case" close="end">
when id=#{item.id} then #{item.applyTime}
</foreach>
where id in
<foreach collection="list" index="index" item="item"
separator="," open="(" close=")">
#{item.id,jdbcType=INTEGER}
</foreach>
</update>

3. 批量删除:

PS:一般查询出来的List都是包含对象在里面的,那么怎么清理出单独包含ID的list呢?

可以参考下面方式,第一个listData是从数据库查询出来的list数据,每个元素都是一个对象;

然后单独把里面每个元素的id给取出来放入新的list(ids)。

List<AgentRechargeOrder> listData = agentRechargeOrderServiceImpl.getListByXXXX(XXXX);
List<Integer> ids = listData.stream().map(AgentRechargeOrder::getId).collect(Collectors.toList());

如果不想清除出单独的id的list,直接传整个List也是可以的, 这样mapper层传值就改成对应的包含对象的List即可。

Mapper层:

int deleteMany(List<Integer> ids);

对应的mapper.xml:

<delete id="deleteMany">
delete from agent_recharge_order where id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>

最后补充个提醒:

因为批量操作会拼接成很长很长的mysql语句,所以mysql server在接收数据包的时候,对这个数据包的大小是有设置项限制的。

如果超过设置的值,就会报错:

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large

那么就需要修改这个设置项,所以推荐提前先把对应的设置值稍微弄大一点

Mybatis 中传入List实现 批量插入、批量更新、批量删除的更多相关文章

  1. Oracle+Mybatis批量插入,更新和删除

    1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...

  2. Hibernate批处理操作优化 (批量插入、更新与删除)

    问题描述 我开发的网站加了个新功能:需要在线上处理表数据的批量合并和更新,昨天下午发布上线,执行该功能后,服务器的load突然增高,变化曲线异常,SA教育了我一番,让我尽快处理,将CPU负载降低. 工 ...

  3. Hibernate 数据的批量插入、更新和删除

    4.2  Hibernate的批量处理 Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作.例如调用Session的delete ...

  4. mybatis批量插入、更新和删除

    https://blog.csdn.net/m0_37981235/article/details/79131493 https://www.jb51.net/article/132823.htm

  5. mybatis 注解的方式批量插入,更新数据

    一,当向数据表中插入一条数据时,一般先检查该数据是否已经存在,如果存在更新,不存在则新增  使用关键字  ON DUPLICATE KEY UPDATE zk_device_id为主键 model  ...

  6. java批量插入或更新的问题

    在批量插入或者更新中,setXXX的时候字段类型必须一致.例如:在普通sql中 pstmt8.setBigDecimal(j ,xxx);可以写成pstmt8.setString(j,xxx.toSt ...

  7. C#使用SqlDataAdapter 实现数据的批量插入和更新

    近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考. 一.数据的插入 DateTime begin = DateTime. ...

  8. MySQL on duplicate key update 批量插入并更新已存在数据

    业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

  9. php+mysqli实现批量执行插入、更新及删除数据的方法

    本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只 ...

  10. SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

随机推荐

  1. 题解 P5607 [Ynoi2013] 无力回天 NOI2017

    简要题意 其实我觉得这个部分可以不要,因为这道题的题面还是很清晰的. 你需要维护一个数据结构,支持区间异或和区间求与 \(v\) 的最大异或和. 思路 对于这种区间问题,最容易想到的就是 分块 线段树 ...

  2. iOS14新特性

    6月23日凌晨,苹果首次在线上举办全球开发者大会WWDC2020.在大会上,苹果对iOS.iPadOS.macOS.watchOS.tvOS进行更新,其中大家最关心的iOS14,主要更新了36个功能. ...

  3. 终端安装python3使用如下指令

    ''' brew install python3 ''' 会报错,报错如下:Cannot install in Homebrew on ARM processor in Intel default p ...

  4. antDesign 【NG-ZORRO、Angular】日期选择框时间段nz-range-picker设置默认选择日期及限制日期可选范围

    下面的代码包含 1.只可以选择今天以后 2.只可以选择今天开始一周内 3.只能选择今天之前的 import { Component } from '@angular/core'; import dif ...

  5. ng-alain创建组件添加路由导航菜单项基础步骤详解

    首先呢~ 我们要在需要创建模块的路径例如AAA目录下,在终端打开(就是和在shell窗口打开一样的) 然后 ng g ng-alain:module XXXmodule 好了,创建了一个模块 接下来会 ...

  6. 【模板】网络最大流 Dinic(多路增广+当前弧优化)

    复杂度上界为 \(\Theta(n^2m)\),实际效率远高于此. #include <bits/stdc++.h> using namespace std; const int N=5e ...

  7. A+B Problem C++

    前言继上次发表的A+B Problem C语言后,今天我们来学习一下A+B Problem C++ 正文什么是C++? C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象 ...

  8. 面试官:JVM是如何判定对象已死的?

    本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 知道的越多,才知知道的越少.--苏格拉底 目录 引用计数算法 可达性分析算法 引用类型 ...

  9. SpringMVC的表单组件、国际化

    spring mvc 的表单标签库 1.Student实体类 package com.southwind.POJO; import lombok.Data; @Data public class St ...

  10. JZOJ 3992.Christmas

    题目大意 给定一个数列,支持区间加一个数和区间取 \(max\),询问单点询问数值和它被更改的次数 思路 模板的吉司机线段树 维护区间最小值和严格次小值以及最小值的个数 针对询问维护区间和以及区间修改 ...