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);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值