我的寫法:
<delete id="delMultiByIds2" parameterType="java.util.List">
delete from tb_duty where
<foreach collection="list" item="item" index="index" separator="or">
( dscd=#{item.dscd},
and unit_id=#{item.unitId},
and year=#{item.year},
and month=#{item.month},
and flag=#{item.flag} )
</foreach>
</delete>
語句的語法沒錯,只是無法刪除數據庫中的記錄,肯定是語句的寫法有問題。
希望有經驗的高手指教一把!
問題解決後興奮地寫下:
程序批量刪除無法刪除的主要問題最終還是在sql語句上,雖然debug日志上能看到sql語句和參數都沒有問題,但是!sql語句執行的時候並沒有拿到這些個參數。經調試,將foreach中參數賦值的寫法由原先的
<foreach collection="list" item="item" index="index" separator="union all">
。。。B.dscd=#{item.dscd} and B.unit_id=#{item.unitId} 。。。
</foreach>
修改為:
<foreach collection="list" item="item" index="index" separator="union all">
。。。B.dscd=${item.dscd} and B.unit_id=${item.unitId} 。。。
</foreach>
至此,困擾我許久的問題得以解決!
附:Mybatis針對Oracle數據庫“多條件”批量刪除的mapper.xml
<!-- 批量刪除值班表 -->
<delete id="delMultiByIds2" parameterType="java.util.List">
delete from tb_duty A
where exists
(
select 1 from(
<foreach collection="list" item="item" index="index" separator="union all">
select B.* from tb_duty B where 1=1 and B.dscd=${item.dscd} and B.unit_id=${item.unitId} and
B.year=${item.year} and B.month=${item.month} and B.flag=${item.flag}
</foreach>
)S where A.duty_id=S.duty_id
)
</delete>