Mybatis:批量插入,主键或唯一索引键存在则覆盖 ON DUPLICATE KEY UPDATE

    INSERT
    into t_brokerage
    (Fuid
    ,Fsku_id
    ,Fsku_brokerage)
    values
    <foreach collection ="brokerageList" item="brokerage" separator =",">
      (#{brokerage.fuid}
      ,#{brokerage.fskuId}
      ,#{brokerage.fskuBrokerage})
    </foreach >
     ON DUPLICATE KEY UPDATE
     Fsku_brokerage = values(Fsku_brokerage);

当需求需要批量导入的,且需要保证如果主键或唯一索引键已存在,则覆盖需求,可以用

ON DUPLICATE KEY UPDATE 语法

示例如上,博主的Fuid,Fsku_id是联合的唯一索引键,所以覆盖的字段就只写Fsku_brokerage(可以覆盖多个字段)

 

MyBatis中,`ON DUPLICATE KEY UPDATE` 是一种数据库操作语句,用于在尝试插入一个新记录时,如果因为主键唯一索引冲突而失败,则会执行一个更新操作。这种SQL语句特别适用于当你希望在记录已存在时更新该记录,而不存在时则插入新记录的场景。 在MyBatis中,你可以通过XML映射文件注解的方式来使用`ON DUPLICATE KEY UPDATE`。以下是使用XML映射文件的一个示例: ```xml <insert id="insertOrUpdate" useGeneratedKeys="true" keyProperty="id"> INSERT INTO your_table (column1, column2, ...) VALUES (#{param1}, #{param2}, ...) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2) </insert> ``` 在这个例子中,`your_table`是你要插入更新的表名,`column1`, `column2`等是你希望插入更新的列名,`param1`, `param2`等是传递给映射方法的参数。当尝试插入一条记录时,如果`your_table`表中已存在具有相同主键唯一索引值的记录,则会执行`ON DUPLICATE KEY UPDATE`后面的更新语句。 同样的逻辑也可以通过注解来实现,例如: ```java @Options(useGeneratedKeys = true, keyProperty = "id") @Insert("INSERT INTO your_table (column1, column2, ...) VALUES (#{param1}, #{param2}, ...)") @Update("UPDATE your_table SET column1 = #{param1}, column2 = #{param2}, ... WHERE id = #{id}") @SelectKey(statement="SELECT LAST_INSERT_ID()", keyProperty="id", before=false, resultType=int.class) public void insertOrUpdate(YourEntity entity); ``` 在这种方式下,当尝试插入数据时,如果出现重复错误,MyBatis会自动根据`@Update`注解中定义的SQL语句来更新记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值