最后更新于

Mybatis实现批量插入并更新的两种方法

分类: mybatis

MyBatis实现批量插入(存在则更新,不存在则插入数据)有两种情况,一种情况是没有唯一索引,一种是有唯一索引。两种情况的实现方法如下。

🚫 没有唯一索引

当表没有唯一索引时,需要先查询记录是否存在,然后根据结果决定插入或更新:

<insert id="saveOrUpdate2" >
  <select count(*) as count from user where id = #{id} for update</select>
  <if test="count > 0">
    update user set age = #{age}, name = #{name} where id = #{id}
  </if>
  <if test="count == 0">
    insert into user (age, name) values (#{age}, #{name})
  </if>
</insert>

✅ 有唯一索引

当表有唯一索引时(例如name字段有唯一索引),可以使用MySQL的ON DUPLICATE KEY UPDATE语法:

<insert id="insertOrUpdateUser" parameterType="User">
  INSERT INTO user (name, age, email)
  VALUES (#{name}, #{age}, #{email})
  ON DUPLICATE KEY UPDATE
  age = VALUES(age),
  email = VALUES(email);
</insert>

这种方法更加高效,因为它在一条SQL语句中完成了插入或更新的操作,避免了额外的查询开销。