mybatis批量数据的 ON DUPLICATE KEY UPDATE
时间: 2024-10-10 08:16:11 浏览: 89
MyBatis中处理批量更新操作时,如果想要利用`ON DUPLICATE KEY UPDATE`语句来避免插入重复键并更新已存在的行,通常是在涉及到主键或唯一键约束的情况。这是在`<insert>`标签中,通过设置`keyProperty`属性指定主键字段,并结合`sqlStatement`属性来模拟SQL的`ON DUPLICATE KEY UPDATE`特性。
例如,假设你有一个用户表(user_table),主键是id,你想批量插入用户信息,如果遇到id已经存在的情况,只更新email字段:
```xml
<insert id="batchInsertUser" parameterType="java.util.List">
INSERT INTO user_table (id, name, email)
VALUES
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item.id}, #{item.name}, COALESCE(#{item.email}, #{item.defaultEmail})
</foreach>
ON DUPLICATE KEY UPDATE email = COALESCE(#{email}, #{defaultEmail})
</insert>
```
在这个例子中,`COALESCE`函数用于避免`NULL`值对`email`列的更新。如果列表中的某个元素的`email`是`NULL`,则不会更新该行,否则会替换默认值(`#{defaultEmail}`)。
阅读全文