mybatis怎么在批量update中添加where条件


  今天在写业务的时候,碰到一个SQL提速的问题,刚开始的时候一条条的update,那个速度慢到我吐血,上批量。

  但是在批量的时候不是简单无脑根据一个条件去update全部(那这样的话,慢个屁啊)。每次update都要判断条件,例如简单的都是对应每个ID。可能我太菜了,竟然一时之间不知道怎么写了。再次留下了没有技术的泪水。不怕,我是有度娘和Google的孩子。然后找到了方法记录一下。

  解决办法就是说使用case when。

  语法就是:

  update table set field=

  case field1

  when  a  then  b

  when  c  then  d

  end,

  field2 = 

  case field1

  when  a  then  e

  when  c  then  f

    where field1 in (a,c);

  这样就可以根据条件去update了

  当然啦,mybatis怎么写呢,我习惯用注解,简单,直接。所以也贴一下mybatis注解的写法吧,这里用到了script 里面的for循环,不会的可以自己学习一下哦,不过我觉得这个一眼就会啦

 

  

@Update({"<script>",
"update <table> set <field> = CASE <field1> ",
"<foreach collection='lst' item='task' index='index' separator=''>",
"WHEN #{task.<field1>} THEN #{task.<field>}",
"</foreach>",
"END, ",
"<field2> = CASE <field1> ",
"<foreach collection='lst' item='task' index='index' separator=''>",
"WHEN #{task.<field1>} THEN #{task.<field2>}",
"</foreach>",
"END where <field1> in (${ids});",
"</script>"
})
void updateCrmBatch(@Param("lst") List<Object> lst,@Param("ids") String ids);

 ok,打完收工,我波哥说我懒惰了,看起我要勤奋才行啊~加油~~~~

 


免责声明!

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



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