mybatis批量新增和修改

使用mybatis实现批量新增和批量修改:
ON DUPLICATE KEY UPDATE
on duplicate key update :判断主键是否存在,主键存在则更新,不存在就新增
在这里插入图片描述

insert…on duplicate key update语法的作用,可以分析到,当发生主键冲突的时候,可以直接进行update操作,这个update操作里面可以更新任意想要更新的列;而没有主键冲突的时候,相当于对这个表进行了一次插入操作

 int i = sysUserMapper.batchInsertOrUpdate(userIds,tripRuleId);
 
 int batchInsertOrUpdate(@Param("userIds")List<Integer> userIds, @Param("tripRuleId")String tripRuleId);

  <insert id="batchInsertOrUpdate">
        insert into basic_sys_user_ext(user_id,user_trip_rule)
        values
        <foreach collection ="userIds" item="userId" index= "index" separator =",">
            (#{userId},#{tripRuleId})
        </foreach>
        ON DUPLICATE KEY UPDATE
        user_id = user_id, user_trip_rule = VALUES(user_trip_rule)
    </insert>

输出SQL:

INSERT INTO sys_user (user_id, user_trip_rule) VALUES (5422122, '59'), (454212, '59'), (231122, '59'), (34343, '59'), (889, '59'), (999, '59')
 ON DUPLICATE KEY UPDATE user_id = user_id, user_trip_rule = VALUES(user_trip_rule);

说明:

1. on duplicate key update 含义:
1)如果在INSERT语句末尾指定了 on duplicate key update,
并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,
则在出现重复值的行执行UPDATE;
2)如果不会导致唯一值列重复的问题,则插入新行。
2. values(col_name)函数只是取当前插入语句中的插入值,并没有累加功能。
如:count = values(count) 取前面 insert into 中的 count 值,并更新
当有多条记录冲突,需要插入时,前面的更新值都被最后一条记录覆盖,
所以呈现出取最后一条更新的现象。
如:count = count + values(count) 依然取前面 insert into 中的 count 值,
并与原记录值相加后更新回数据库,这样,当多条记录冲突需要插入时,
就实现了不断累加更新的现象。
3.insert into … on duplicate key update … values() 这个语句尽管在冲突时执行了更新,并没有插入,但是发现依然会占用 id 序号(自增),出现很多丢失的 id 值

参考:https://blog.csdn.net/ZYC88888/article/details/104250372

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值