mybatis 返回null之迷(java web)__mybatis

來源:互聯網
上載者:User

1.問題描述

先貼一下我mapping的代碼




 在寫項目的時候遇到了一個問題,就是要求我返回給前端的String類型資料不能有空值,即該值為null的時候我要返回“”Null 字元串過去。但那些資料在MySQL資料庫裡面的時候就是一個null,那我提取出來的時候必須對那些null值的資料做一些處理,於是我靈機一動。



根據mybatis的原始碼,在返回的時候mybatis會利用反射機制擷取該javabena的set方法來進行對屬性的賦值,那麼我就修改set方法使返回null的時候變為“”。就在我為自己這個機智的想啊沾沾自喜的時候,骨感的現實狠狠的打擊了我。



傳回值如圖,根本沒用啊。。。。。。。難道我的set方法是假的嗎。不存在的。。

於是我在javaben加了一個靜態變數 a 



set方法加



於是測試結果是:


沒毛病啊 輸出了10個 set方法也調用了10遍 這到底是什麼問題啊。。。。要崩潰了


2.問題分析

對於這個set問題,我深思了一下我 printf方法是加在沒null欄位的set方法中的,那麼我在加在



看看這個setNickname方法被調用了多少次,由之前的返回結果看出來 nickname是有6個是null的,




很明顯這個set方法只被調用了4次,因為到mybatis返回null的時候是不會調用set的方法的。因為在restultmap源碼中,預設返回的不是一個實體類是一個map,存在null的時,map中就少了這個值就缺少了值的映射調用,所以就沒有調用那個set方法,所有null還是null的。。。




3.解決方案

 1.做到這裡我就有一個解決方案了。既然他不調用我的set方法,那好你強仍你強,我就初始化的時候把string的值設定一下




就這樣初始化一下,我看看測試結果



很好所有null都不見了。。

2.如果我是鐵頭娃,我頭很鐵,我就要mybatis返回的時候調用一下我的set方法,

那當然是有辦法的啦,建立 configuration.xml (這是spring-mybatis結合配置的方法,如果你mybatis設定檔分開可以直接在裡面加入

<setting>中的語句

內容如下:



在spring-mybatis中加這樣語句



在這樣的配置中,你就可以讓null也映射到map裡面就可以調用set方法了(value是你剛剛建立檔案的路徑)

測試一下結果:


set方法被調用了10次,null也不見了沒毛病。。


3.當然還有一種方法,通過修改mybatis的源碼,來對這個null值弄一個預設值。比如返回null的時候把null改成""這樣就可以set進去了

傳送門:http://www.mamicode.com/info-detail-1647006.html

具體怎麼操作,太高大上了我沒試過....感興趣可以去試試


總結:

 一個初學者的小小經驗,不及格的初學者...........


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.