mybatis中使用CASE?WHEN關(guān)鍵字報錯及解決
mybatis使用CASE WHEN關(guān)鍵字報錯
問題展現(xiàn)
如下圖所示:當我直接在 mybatis 的 xml 文件中編寫 CASE WHEN 語句后,執(zhí)行到這個 SQL 的時候就會報這個錯:
解決方案
使用 MybatisPlus 中的 @SqlParser 注解就可以解決此問題
mybatis Case When導致部分數(shù)據(jù)被置空的原因
在使用mybatis框架的時候經(jīng)常會使用批量更新sql的語句,例如:
這樣似乎一句sql能將該表中的所有字段進行更新比較省事,但是如果部分字段為空,會因為這個語句導致這條數(shù)據(jù)為空的字段變?yōu)閚ull,
- 第一條數(shù)據(jù) id = 901, name = "啊啊啊", stock = null
- 第二條數(shù)據(jù) id = 902, name = null ,stock = 100
執(zhí)行出來的sql就會變成這樣。
update product set name = case id when 901 then '啊啊啊' when 902 then null end, stock = case id when 901 then null when 902 then 100 end WHERE id in ( 901 , 902 );
導致數(shù)據(jù)庫的數(shù)據(jù)置空
如何避免
在then后面加一個ifnull判斷,為空的話就讓它等于自己
解析后的sql
update product set name = case id when 901 then ifnull('啊啊啊', name) when 902 then ifnull(null, name) end, stock = case id when 901 then ifnull(null, stock) when 902 then ifnull(100, stock) end WHERE id in ( 901 , 902 );
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java面試崗常見問題之ArrayList和LinkedList的區(qū)別
ArrayList和LinkedList作為我們Java中最常使用的集合類,很多人在被問到他們的區(qū)別時,憋了半天僅僅冒出一句:一個是數(shù)組一個是鏈表。這樣回答簡直讓面試官吐血。為了讓兄弟們打好基礎(chǔ),我們通過實際的使用測試,好好說一下ArrayList和LinkedList的區(qū)別這道經(jīng)典的面試題2022-01-01spring依賴注入成功但在調(diào)用接口的時候拿到的依賴卻是null問題
這篇文章主要介紹了spring依賴注入成功但在調(diào)用接口的時候拿到的依賴卻是null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12SpringBoot整合Mybatis-plus案例及用法實例
mybatis-plus是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下2022-11-11Java基礎(chǔ)之Comparable與Comparator概述
這篇文章主要介紹了Java基礎(chǔ)之Comparable與Comparator詳解,文中有非常詳細的代碼示例,對正在學習java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04