有時候在操作數據庫時,會進行一些批量操作,例如批量插入,in條件查詢等,這時可以利用mybatis的動態sql,foreach元素進行批量操作,相對於在代碼里面進行for循環批量操作數據庫效率較高,以前用過很多次,現在特此記錄一下,下次直接復制修改一下相關信息即可。
第一種情況:in條件查詢
select a.* from pcn.n_lat_trans_detail a ,pcn.n_lat_loan_rsp b
where a.tran_status='3' and a.transaction_id=b.transation_id
and b.rsp_sts='0000' and b.rsp_msg='succ'
and date_format(b.create_time,'%Y%m%d') in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
第二種情況:批量插入
<insert id="batchInsert" parameterType="java.util.List">
insert into doku_repay_rclerr_detail (id, out_transidmerchant, in_transidmerchant,
rcl_task_id, chk_status, diff_reason,
amount, pay_out_date, ext_field1,
remark, create_date, update_date
)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id,jdbcType=INTEGER},
#{item.outTransidmerchant,jdbcType=VARCHAR},
#{item.inTransidmerchant,jdbcType=VARCHAR},
#{item.rclTaskId,jdbcType=VARCHAR},
#{item.chkStatus,jdbcType=VARCHAR},
#{item.diffReason,jdbcType=VARCHAR},
#{item.amount,jdbcType=DECIMAL},
#{item.payOutDate,jdbcType=VARCHAR},
#{item.extField1,jdbcType=VARCHAR},
#{item.remark,jdbcType=VARCHAR},
#{item.createDate,jdbcType=TIMESTAMP},
#{item.updateDate,jdbcType=TIMESTAMP}
)
</foreach>
</insert>
第三種情況:批量更新
update n_lat_stppay_notify set backOne = '1'
where cuentaBeneficiario in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
其他動態sql元素參見:https://www.cnblogs.com/jasonboren/p/11394721.html