mybatis?傳入null值的解決方案
mybatis 傳入null值解決
前端傳入兩個值,如果其中一個為null時,很多時候我們都很困惑,明明傳入的是null,為啥mybatis 的xml文件中的if條件判斷無效?
public String getPersonInfo(@PathParam("Name") String Name, @PathParam("IDCard") String IDCard)
dao層
public List<Map> getPersonInfo(@Param("name") String name, @Param("idcard") String idcard);
xml文件內(nèi)容
<if test="name == null or name == '0'.toString()">? ? ? <![CDATA[ and (b.identity_id = #{idcard,javaType=String,jdbcType=VARCHAR}) ? ? group by name,id_card,birthTime,sex ?]]>? </if>
每次執(zhí)行都是失敗的,網(wǎng)上很多都說要在dao層添加@param注解和xml文件內(nèi)容中要加入jdbcType類型就能解決,最后還是沒解決
其實還有一個點忽略了,就是傳入時的null值其實是個字符串null,根本就不是null,它是個字符串null
? ? ? ? if (Name == null || "null".equalsIgnoreCase(Name)) { ? ? ? ? ? ? Name = null; ? ? ? ? } ? ? ? ? if (IDCard == null || "null".equalsIgnoreCase(IDCard)) { ? ? ? ? ? ? IDCard = null; ? ? ? ? }
問題解決!
mybatis 注入老是為null
今天遇到個很弱智的問題,以此記錄!時刻提醒自己
public int delExhibion(List<String> ids){ Integer result = null; ExhibitionManager exhibitionManager = new ExhibitionManager(); for (String id : ids){ exhibitionManager.setId(id); exhibitionManager.setDelFlag("1"); result += exhibitionManagerMapper.delete(id); } return result; }
發(fā)現(xiàn)老是執(zhí)行 delete 的時候 ,老是報 空指針異常
然后嘗試使用: @Param 給參數(shù)加上命令
int delete(@Param("id") String id); ?
結(jié)果還是不行,
然后在嘗試使用:對象傳參,這樣總該注入進去了吧
int delete(Object dx);
結(jié)果還是不行,
然后在嘗試使用:Mybatis 單個參數(shù)動態(tài)語句引用:
是當我們的參數(shù)為String時,在sql語句中#{id} 會去我們傳進來的參數(shù)調(diào)getId()方法獲取參數(shù),很明顯,String沒有對應(yīng)的方法,所以報錯了,那我們這里要如何引用id呢,需要采用下面的寫法:
<delete id="delete" parameterType="java.lang.String" > ? ? ? ? ? ?SELECT * FROM table ? ? ? ? ?<where> ? ? ? ? ? ? ? ? ? ? ?<if test="_parameter != null"> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AND id= #{id} ? ? ? ? ? ? ? ? ? ? ?</if> ? ? ? ? ? ?</where> ? </select>
單Mybatis傳參為單個參數(shù)時,在sql語句中需要使用 _parameter 來引用這個參數(shù)
結(jié)果還是不行。
終于過了一會兒,看代碼時突然頓悟
? ? public int delExhibion(List<String> ids){ ? ? ? ? Integer result = null; ? ? ? ? for (String id : ids){ ? ? ? ? ? ? ?result += exhibitionManagerMapper.delete(id); ? ? ? ? } ? ? ? ? return result; ? ? }
Integer result 我給他設(shè)置默認值 為null, 并且還讓 reuslt 這個對象 result +=
加等于在執(zhí)行數(shù)據(jù)庫操作返回結(jié)果時 用 result 去接收。 這不就一定是空指針了嗎。
我給 Integer result = 0; 設(shè)置個默認值為0 那也不會出現(xiàn)這種情況!
或者 result = 給result 初始化賦值 也不會報 空指針異常! 不過這樣做在我的業(yè)務(wù)中是不對的哦。 只是不會報錯. 但是獲取不到我想要的執(zhí)行成功條數(shù)
Integer result = null; result = ?exhibitionManagerMapper.delete(id);
真的是被自己氣到了。以此記錄!時刻提醒自己
?public int delExhibion(List<String> ids){ ? ? ? ? Integer result = 0; ? ? ? ? for (String id : ids){ ? ? ? ? ? ? ?result += exhibitionManagerMapper.delete(id); ? ? ? ? } ? ? ? ? return result; ? ? }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis-plus的自動填充時間的問題(添加到數(shù)據(jù)庫的時間比當前時間多4個小時)
這篇文章主要介紹了mybatis-plus的自動填充時間的問題(添加到數(shù)據(jù)庫的時間比當前時間多4個小時),本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序(動力節(jié)點Java學(xué)院整理)
冒泡排序(Bubble Sort)是一種簡單的排序算法。本文重點給大家介紹java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-04-04java8 LocalDate LocalDateTime等時間類用法實例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時間類用法,結(jié)合具體實例形式分析了LocalDate、LocalTime、LocalDateTime等日期時間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下2017-04-04SpringBoot整合Canal與RabbitMQ監(jiān)聽數(shù)據(jù)變更記錄
這篇文章主要介紹了SpringBoot整合Canal與RabbitMQ監(jiān)聽數(shù)據(jù)變更記錄,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09Spring Boot 集成 Mybatis Plus 自動填充字段的實例詳解
這篇文章主要介紹了Spring Boot 集成 Mybatis Plus 自動填充字段,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03