Mybatis执行批量更新的sql(mysql中)

方式一

<update id="batchUpdate">
  <foreach collection="list" item="item" index="index" open="" close="" separator=";">
     update tableA set full_pinyin = #{item.fullPinyin}, first_letters =  #{item.firstLetters} where id =  #{item.id}
  </foreach>
 </update>

此种方式数据库连接必须配置:&allowMultiQueries=true,如:jdbc:mysql://i.cnblogs.com:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
否则会报错:

会生成多条sql,一次事务

方式二

<update id="batchUpdate">
        update tableA set full_pinyin =
        <foreach collection="list" item="item" index="index" separator=" " open="case id" close="end">
            when #{item.id} then #{item.fullPinyin}
        </foreach>
           ,first_letters =
        <foreach collection="list" item="item" index="index" separator=" " open="case id" close="end">
            when #{item.id} then #{item.firstLetters}
        </foreach>
        where id in
        <foreach collection="list" item="item" index="index"  separator="," open="(" close=")">
            #{item.id}
        </foreach>
    </update>

此种方式会生成一条sql,一次事务

如:

update tableA set full_pinyin =
         case id  
            when 570421480220418048 then 'huangmenji'
           
            when 570451322303307776 then 'fenjianceshikehu'
         end 
           , first_letters =
         case id  
            when 570421480220418048 then 'hmj'
           
            when 570451322303307776 then 'fjcskh'
         end 
        where id in
         (  
            570421480220418048
         , 
            570451322303307776
         );
原文地址:https://www.cnblogs.com/zhangxianming/p/15534455.html