Spring boot + MyBatis返回map中null值處理


在日常開發中,查詢數據返回類型為map,數據庫中有些自動值為null,則返回的結果中沒有值為空的字段,則如何顯示值為空的字段呢?

1.xml文件:

[html]  view plain  copy
 
 
 
 
  1. <resultMap id="userLoginInfo" type="map"  >  
  2.   <result column="uuid" property="id" />  
  3.   <result column="uuid2" property="uuid" />  
  4.   <result column="account" property="phone" />  
  5.   <result column="login_time" property="loginTime" />  
  6.   <result column="token" property="token" />  
  7.   <result column="data_progress" property="dataProgress" />  
  8.   <result column="account_locked" property="accountLocked" />  
  9.   <result column="is_delete" property="isDelete" />  
  10.   <result column="nickname" property="nickname" />  
  11.   <result column="user_head" property="userHead" />  
  12. </resultMap>  

返回結果:

[html]  view plain  copy
 
 
 
 
  1. {accountLocked=false, loginTime=1480559610977, phone=18301413850, isDelete=false, dataProgress=0, nickname=,   
  2. id=93cd68fcb95043febd28d6ad86666029, uuid=544dc45953e2dcc60e23ecccc52c578b, token=WT1Kgx}  

發現返回結果Map中沒有user_head字段,原來 user_head在數據庫中值為null,所以說數據庫中所有值為null的字段在查詢接收resultMap時都不存在

經過各種查資料,總結以下解決方案:

 

解決方法一:

1、在Mybatis_config.xml文件中添加配置信息:

 

[html]  view plain  copy
 
 
 
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.   <settings>  
  5.   <!--解決,查詢返回結果含null沒有對應字段值問題-->  
  6.   <setting name="callSettersOnNulls" value="true"/>  
  7.   </settings>  
  8. </configuration>  

備注:注意xml文件的頭部引入的是mybaties-3-config.dtd

測試結果:

[html]  view plain  copy
 
 
 
 
  1. {accountLocked=false, loginTime=1480559610977, userHead=null, phone=18301413850, isDelete=false, dataProgress=0, nickname=,   
  2. id=93cd68fcb95043febd28d6ad86666029, uuid=544dc45953e2dcc60e23ecccc52c578b, token=WT1Kgx}  

經測試,值為null的結果在map中存在

 

 

 

方法二:通過sql語句實現空值填充:

 

1、postgresql數據庫:

   select COALESCE(D.wk_ptn_cd, '00') as wk_ptn_cd

   判斷字段wk_ptn_cd是否為空,空給默認值‘00’,否則取該字段

 

2、非postgresql數據庫:Mybatis使用IFNULL(P1,P2)函數

 

 

1.問題:

Mybatis中IFNULL(p1,p2)函數怎么用? 
首先看沒有IFNULL的查詢:

2.1源代碼:

  1.  
    select md.valueofdouble, md.periodcode
  2.  
    from meas_data md
  3.  
    WHERE objectcode="YQ"
  4.  
    AND datatime="2017-5-25 00:00:00"
  5.  
    AND measurementcode="PI_DRFDL"

2.2.截圖:

這里寫圖片描述

3.1源代碼:

  1.  
    select md.valueofdouble, IFNULL(md.periodcode,0)
  2.  
    from meas_data md
  3.  
    WHERE objectcode="YQ"
  4.  
    AND datatime="2017-5-25 00:00:00"
  5.  
    AND measurementcode="PI_DRFDL"

3.2截圖:

 

 

4.總結:

1、IFNULL(P1,P2)如果如果P1不為空,則返回值為P1;P1為NULL,則返回為P2;P2有點類似替補球員; 
2、注意,IFNULL只是針對局部字段的替換;如果整個結果查出來都是空,則不能使用IFNULL(P1,P2)

4.1源碼:

  1.  
    select md.valueofdouble, md.periodcode
  2.  
    from meas_data md
  3.  
    WHERE objectcode="YQ"
  4.  
    AND datatime="2017-5-25 00:00:01"
  5.  
    AND measurementcode="PI_DRFDL"

4.2截圖:

 

 

 

 

 


4.3源碼:

  1.  
    select md.valueofdouble, IFNULL(md.periodcode,0)
  2.  
    from meas_data md
  3.  
    WHERE objectcode="YQ"
  4.  
    AND datatime="2017-5-25 00:00:01"
  5.  
    AND measurementcode="PI_DRFDL"

4.4截圖:

 

 

 

 

 

 


免責聲明!

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



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