Mybatis批量操作sql写法示例批量新增、更新

Mybatis技术,现在是工作中使用频率越来越高,我们在对数据库进行操作的时候,经常会遇到批量操作的需求,这篇文章主要给大家介绍了关于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

MysqL的批量新增sql的写法示例,先看一下mapper的写法;

void batchSaveUser(List userList);

接下来看sql如何写:

insert into sys_user (ding_user_id, username, nickname, password, email, mobile, avatar, creator_id, create_time, updator_id, update_time, is_delete) values ( #{user.dingUserId}, #{user.username}, #{user.nickname}, #{user.password}, #{user.email}, #{user.mobile}, #{user.avatar}, #{user.creatorId}, Now(), #{user.updatorId}, Now(), 0 )

批量Insert,参数为Map>

void batchSaveGroupAndUser(@Param("map") Map> groupUserMap);

接下来看sql如何写:

insert into sys_group_member (group_id, user_id, creator_id, create_time) values ( #{groupId}, #{userId}, 'admin', Now() )

批量Insert,参数为Map

void batchInsert(@Param("map") Map map);

insert into brand_info (code, `name`, is_delete, create_time) values #{key}, #{value}, 0, Now()

如果是只需要遍历key,写法则是collection=“map.keys”

insert into brand_info (code, is_delete, create_time) values #{key}, 0, Now()

同理,如果是只需要遍历value,写法则是collection=“map.values”

insert into brand_info (code, is_delete, create_time) values #{value}, 0, Now()

批量Update,参数为List

**注意:**在执行批量Update的时候,数据库的url配置需要添加一项参数:&allowMultiQueries=true

如果没有这个配置参数的话,执行下面的更新语句会报错:

正确的sql写法如下:

update sys_corporation set `name` = #{item.name}, code = #{item.code}, parent_code = #{item.parentCode}, updater = 'system', update_time = Now() where id = #{item.id}

总结

到此这篇关于Mybatis批量操作sql写法的文章就介绍到这了,更多相关Mybatis批量操作sql内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...