技术要点

MyBatis实现批量插入和更新的一种技术手段就是使用foreach标签。

MySQL批量插入

<insert id="insertList" parameterType="java.util.List">
  insert into user(id, name) values
  <foreach collection="list" item="u" separator=",">
    (#{u.id},#{u.name})
  </foreach>
</insert>

 Oracle批量插入

<insert id="insertList" parameterType="java.util.List">
  insert into user(id,name)
  <foreach collection="list" item="u" separator="union all">
    select #{u.id},#{u.name} from dual
  </foreach>
</insert>

 MySQL批量更新

<update id="batchUpdate" parameterType="java.util.List">
  <foreach collection="list" item="u" index="index" open="" close="" separator=";">
    update user
    set name=#{u.name}
    where id = #{u.id};
  </foreach>
</update>

注意,MySQL在做批量更新时,需要在JDBC连接字符串后面跟上&allowMultiQueries=true,来允许一次执行多条语句。如:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true。

Oracle批量更新

<update id="batchUpdate"  parameterType="java.util.List">
   <foreach collection="list" item="u" index="index" open="begin" close="end;" separator=";">
      update user 
      set test=${u.name}+1
      where id = ${u.id}
   </foreach>
</update>

发表评论

邮箱地址不会被公开。 必填项已用*标注