today a question let me happy(抓狂)
头儿分了一个小任务,让修改循环调用dao层的那些不啦不啦不啦,鉴于之前写过批量更新的玩意,so 很快代码就修改完了,but 测的时候发现总是报错,很诡异,mmp 万分不解,以前就是这么写的,为嘛在这个项目就GG了?
后来还是广大人民群众给我指了条明道。OK,let us see
方法一:
update ${t_sr_process_detail}
TENANT_ID = #{item.tenantId,jdbcType=VARCHAR},
LG_ID = #{item.lgId,jdbcType=BIGINT},
ROUTE_LG_ID = #{item.routeLgId,jdbcType=BIGINT},
.....
where DSPS_PROC_ID = #{item.dspsProcId,jdbcType=BIGINT};
这就是我最先想到的,直接循环,构造出多条update语句 但是,很不幸的是 mysql默认不支持这种写法,其实它是不支持多条以‘;’分割的sql
解决方式:在jdbcURL配置追加:allowMultiQueries=true
方法二:
update ${t_sr_process_detail}
when DSPS_PROC_ID=#{item.dspsProcId} then #{item.tenantId,jdbcType=VARCHAR}
when DSPS_PROC_ID=#{item.dspsProcId} then #{item.lgId,jdbcType=BIGINT}
when DSPS_PROC_ID=#{item.dspsProcId} then #{item.routeLgId,jdbcType=BIGINT}
when DSPS_PROC_ID=#{item.dspsProcId} then #{item.wrkfmId,jdbcType=BIGINT}
.....
where DSPS_PROC_ID in
#{item.dspsProcId,jdbcType=BIGINT}
方法二据说效率高,其实不然,经过测试,发现方法二的速度明显慢与方法一,因为参数太多,使用case when 则每个参数都会循环,so we checked the first method .