Springboot注解形式的開發批量更新數據(mybatis批量(多條語句多字段)更新SQL配置)


 


注解配置:

@Update(" <script> " +
" update CS_********_table_name " +
" <trim prefix=\"set\" suffixOverrides=\",\"> " +
" <trim prefix=\"PROVINCE_CODE =case\" suffix=\"end,\"> " +
" <foreach collection=\"updateHYs\" item=\"i\" index=\"index\"> " +
" <if test=\"i.SHENG_CODE != null\"> " +
" when COUNTY_CODE = #{i.XIAN_CODE} " +
" and INDUSTRY_ID = #{i.HY_CODE}" +
" then #{i.SHENG_CODE} " +
" </if> " +
" </foreach> " +
" </trim> " +
" </trim> " +
" where " +
" <foreach collection=\"updateHYs\" separator=\"or\" item=\"i\" index=\"index\" > " +
" COUNTY_CODE = #{i.XIAN_CODE} " +
" and INDUSTRY_ID = #{i.HY_CODE} " +
" </foreach> " +
"</script>")
Integer update************(@Param("updateHYs")List<Map<String,Object>> updateHYs);

 

打印的sql:

update CS_********_table_name
set
PROVINCE_CODE =
case
when COUNTY_CODE = ? and INDUSTRY_ID = ?
then ?
when COUNTY_CODE = ? and INDUSTRY_ID = ?
then ?
when COUNTY_CODE = ? and INDUSTRY_ID = ?
then ?
when COUNTY_CODE = ? and INDUSTRY_ID = ?
then ?
end,
where
COUNTY_CODE = ? and INDUSTRY_ID = ?

 

打印的數據參數:

130726(String), 6(String),
130000(String),

130727(String), 6(String),
130000(String),

130728(String), 3(String),
130000(String),

 

拼接后的sql:

update CS_********_table_name
set
PROVINCE_CODE =
case
when COUNTY_CODE = '130726' and INDUSTRY_ID = '6'
then '130000'
when COUNTY_CODE = '130727' and INDUSTRY_ID = '6'
then '130000'
when COUNTY_CODE = '130728' and INDUSTRY_ID = '3'
then '130000'
when COUNTY_CODE = '130728' and INDUSTRY_ID = '6'
then '130000'
end,

注意:

之前想着字段寫成動態的,即增加條件判斷字段已有值是否和更新值相同,如果相同則不更新,代碼如下:

" <trim prefix=\"PROVINCE_CODE =case\" suffix=\"end,\"> " +
" <foreach collection=\"updateHYs\" item=\"i\" index=\"index\"> " +
" <if test=\"i.SHENG_CODE != null\"> " +
" when COUNTY_CODE = #{i.XIAN_CODE} " +
" and INDUSTRY_ID = #{i.HY_CODE}" +
" and PROVINCE_CODE = #{i.SHENG_CODE}" +
" then #{i.SHENG_CODE} " +
" </if> " +
" </foreach> " +
" </trim> " +
其中 " and PROVINCE_CODE = #{i.SHENG_CODE} " 是判斷值是否相同的條件,最后執行時表中字段值全部被改為NULL(如果字段約束不能為null,則執行會報錯),去掉這個判斷之后執行成功,去掉這個判斷后的問題是不管值是否相同都會被修改,如果需要動態判斷后再決定是否修改該字段,可以優化上面的配置語句,外層加循環,循環內先判斷值是否一致,如果一致再寫 "字段名=值," 語句


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM