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
         );


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM