注解配置:
@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,則執行會報錯),去掉這個判斷之后執行成功,去掉這個判斷后的問題是不管值是否相同都會被修改,如果需要動態判斷后再決定是否修改該字段,可以優化上面的配置語句,外層加循環,循環內先判斷值是否一致,如果一致再寫 "字段名=值," 語句