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 UPDATEuser_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
總結
以上是生活随笔為你收集整理的mybatis批量新增和修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php制作日历带节日实验目的,PHP 制
- 下一篇: 数学不好 学软件测试能学会吗,英语差、数