MySQL + MyBatis 批量插入时存在则忽略或更新记录
生活随笔
收集整理的這篇文章主要介紹了
MySQL + MyBatis 批量插入时存在则忽略或更新记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、存在時則忽略
為什么在發現重復時會忽略?這里面涉及到兩個地方。
1、重復則忽略。那么首先是需要判斷是否重復,這里是通過唯一索引判斷是否重復的。如果表中唯一索引的字段已經存在與將要插入的記錄行中唯一索引的字段值相同,則標識為重復。
MySQL 中建立唯一索引:ALTER TABLE ‘tableName’ ADD UNIQUE (‘column’);
如下面的代碼塊中的 ght_replace 表的 oldnumber 字段建立唯一索引:
ALTER TABLE ght_replace ADD UNIQUE (oldnumber);2、通過在SQL語句中的 IGNORE 關鍵字標識,如果相同,則該條記錄行不插入。
如下面的代碼塊中所示:
@Insert({"<script>","insert ignore into ght_replace(oldnumber, newnumber)","values","<foreach item ='item' collection = 'andOldVoList' separator = ','>","(#{item.oldnumber}, #{item.newnumber})","</foreach>","ON DUPLICATE KEY UPDATE oldnumber = VALUES(oldnumber)","</script>"})int batchInsert(@Param("andOldVoList")List<NewAndOldVo> andOldVoList);二、存在時則更新
@Insert({"<script>","insert into telit_project_relation(project_name, inside_project_number)","values","<foreach item ='dataInfo' collection = 'projectRelationEntities' separator = ','>","(#{dataInfo.projectName}, #{dataInfo.insideProjectNumber})","</foreach>","ON DUPLICATE KEY UPDATE project_name = VALUES(project_name)","</script>"})int batchInsert(@Param("projectRelationEntities")List<TelitProjectRelationEntity> projectRelationEntities);存在時則更新代碼如上所示。存在則更新的關鍵在 "
ON DUPLICATE KEY UPDATE project_name = VALUES(project_name)是數據庫中列名,不是 entity 中的屬性名
三、存在復合唯一索引時,批量插入,如果存在則更新
在使用符合唯一索引時也是一樣的,首先需要的是唯一索引:
ALTER TABLE asus_bom_relationship ADD UNIQUE INDEX(byd_material_no, bydComponent);
/*** 批量插入功能** @param entityList* @return*/@Insert({"<script>","insert into asus_bom_relationship(material_no, byd_material_no, bom_component, bydComponent)","values","<foreach item ='dataInfo' collection = 'entityList' separator = ','>","(#{dataInfo.materialNo}, #{dataInfo.bydMaterialNo}, #{dataInfo.bomComponent}, #{dataInfo.bydComponent})","</foreach>","ON DUPLICATE KEY UPDATE byd_material_no = VALUES(byd_material_no), bydComponent = VALUES(bydComponent)","</script>"})int batchInsert(@Param("entityList") List<RelationShipEntity> entityList); 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MySQL + MyBatis 批量插入时存在则忽略或更新记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3精要(19)-全局变量gl
- 下一篇: linux内核杂记(3)-进程(2)