Mybatis批量操作sql写法示例(批量新增、更新)
作者:Leafage 发布时间:2022-12-06 15:19:16
标签:mybatis,批量,sql
在使用foreach时,collection属性值的三种情况:
如果传入的参数类型为List时,collection的默认属性值为list,同样可以使用@Param注解自定义keyName;
如果传入的参数类型为array时,collection的默认属性值为array,同样可以使用@Param注解自定义keyName;
如果传入的参数类型为Map时,collection的属性值可为三种情况:
1.遍历map.keys;
2.遍历map.values;
3.遍历map.entrySet()
批量Insert,参数为List<Object>
mysql的批量新增sql的写法示例,先看一下mapper的写法;
void batchSaveUser(List<SysUser> userList);
接下来看sql如何写:
<insert id="batchSaveUser">
insert into sys_user (ding_user_id, username, nickname, password, email,
mobile, avatar, creator_id, create_time, updator_id, update_time, is_delete)
values
<foreach collection="list" item="user" separator=",">
(
#{user.dingUserId}, #{user.username}, #{user.nickname}, #{user.password}, #{user.email},
#{user.mobile}, #{user.avatar}, #{user.creatorId}, now(), #{user.updatorId}, now(), 0
)
</foreach>
</insert>
批量Insert,参数为Map<Long, List<Long>>
void batchSaveGroupAndUser(@Param("map") Map<Long, List<Long>> groupUserMap);
接下来看sql如何写:
<insert id="batchSaveGroupAndUser" parameterType="java.util.Map">
insert into sys_group_member (group_id, user_id, creator_id, create_time)
values
<foreach collection="map.keys" item="groupId" separator=",">
<foreach collection="map[groupId]" item="userId" separator=",">
(
#{groupId}, #{userId}, 'admin', now()
)
</foreach>
</foreach>
</insert>
批量Insert,参数为Map<String, String>
void batchInsert(@Param("map") Map<String, String> map);
<insert id="batchInsert" parameterType="java.util.Map">
insert into brand_info (code, `name`, is_delete, create_time)
values
<foreach collection="map.entrySet()" index="key" item="value" open="(" close=")" separator=",">
#{key}, #{value}, 0, now()
</foreach>
</insert>
如果是只需要遍历key,写法则是collection=“map.keys”
<insert id="batchSave" parameterType="java.util.Map">
insert into brand_info (code, is_delete, create_time)
values
<foreach collection="map.keys" item="key" open="(" close=")" separator=",">
#{key}, 0, now()
</foreach>
</insert>
同理,如果是只需要遍历value,写法则是collection=“map.values”
<insert id="batchSave" parameterType="java.util.Map">
insert into brand_info (code, is_delete, create_time)
values
<foreach collection="map.values" item="value" open="(" close=")" separator=",">
#{value}, 0, now()
</foreach>
</insert>
批量Update,参数为List<Object>
**注意:**在执行批量Update的时候,数据库的url配置需要添加一项参数:&allowMultiQueries=true
如果没有这个配置参数的话,执行下面的更新语句会报错:
正确的sql写法如下:
<update id="batchUpdateCorporation" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";">
update sys_corporation set
<if test="item.name != null and item.name !=''">
`name` = #{item.name},
</if>
<if test="item.code != null and item.code !=''">
code = #{item.code},
</if>
<if test="item.parentCode != null and item.parentCode !=''">
parent_code = #{item.parentCode},
</if>
updater = 'system',
update_time = now()
where id = #{item.id}
</foreach>
</update>
来源:https://www.leafage.top/posts/detail/20815YW6T


猜你喜欢
- 一、需求有时候应用需要在内部切换语言但又不影响系统的语言,比如是应用现在是中文的,系统语言也是中文的,我把应用的切换成英文显示后系统语言还是
- 开发过程中有这样一个场景,2个 bean 初始化逻辑中有依赖关系,需要控制二者的初始化顺序。实现方式可以有多种,本文结合目前对 Spring
- 题主要区分清楚内码(internal encoding)和外码(external encoding)就好了。内码是程序内部使用的字符编码,特
- 一、添加联系人Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppe
- 关于链表链表是有序的列表链表是以节点的方式来存储每个节点包含data域,next域(指向下一个节点)分带头节点的链表和没有头节点的链表定义一
- ??是一个二元运算符,如果左操作数非空,则返回左操作数,否则返回右操作数,所以,在一些特定的场合可以用它来代替?:运算符,简化代码书写。例1
- 数组实现Java 自定义Queue队列及应用Java 自定义队列Queue:队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能
- 在C/C++跨平台开发中,我们知道在Windows上可以通过VS,进行单步断点调试,这非常方便。但是我们如果编译好的动态库so,想要跟踪下其
- springboot集成mybatis plus和dynamic-datasource注意事项环境spring-boot-starter-p
- 传值(by value)与传址(by reference)分别为普通传递参数方式与ref声明方式,传址方式在使用前需要ref关键词修饰;ou
- 一、设置Fira_Code字体1.下载字体这里给出github下载链接,点击链接后在README.md中的Download & In
- 一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或0
- SpringBoot是什么?Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初
- 1、下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java2、下载下来的包解压后
- 前言我们在实际项目中,除了会碰到一对一的情况,还有一对多的情况,比如一个用户可以有多辆车,而一辆车只能有一个用户等等,今天我们就来一起学习下
- 一、特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对
- Map简介将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象
- Random random = new Random((int)(DateTime.Now.Ticks)); &nbs
- Android 7.0行为变更 FileUriExposedException解决方法当我们开发关于【在应用间共享文件】相关功能的时候,在A
- 本文实例为大家分享了Android实现自动转圈效果展示的具体代码,供大家参考,具体内容如下在values文件夹下创建attrs.xml<