Mybatis中返回类型非vo时,字段值为Null时,会自动过滤

我不是女神ヾ 2023-06-29 10:45 88阅读 0赞

一、场景:

程序中需要用List接受返回值,返回值Map中value存在null空值,在遍历时获取key时,返回null,相当于不存在key,直接抛出了nullpointexception…

二、概述:

1)如果返回值是List类型,Mybatis会默认自动过滤掉value为null的字段。
2)Mybatis在默认情况下,结果集解析生成Map,如果value为null,那么key不会被加入到map中,所以map接收结果时就没有value为null的键值。

三、解决方案:

1)配置文件(大型项目都是统一配置,很难去修改)
  1. <settings>
  2. <!-- 设置返回HashMap,字段值为null时保存key,如果不设置默认是false -->
  3. <setting name="callSettersOnNulls" value="true"/>
  4. </settings>
2)返回NULL字符串代替,在java中解析时用字符串判断校验
  1. --用nvl函数判断转换成字符串'NULL'
  2. SELECT C.CONS_NO, NVL(D.CUST_NO,'NULL') CUST_NO, NVL(C.CUST_NAME,'NULL') CUST_NAME
  3. FROM C_CUST D,C_CONS C
  4. WHERE C.CUST_ID = D.CUST_ID(+)
  5. List<Map<String,String>> list = dao.queryConsInfo();
  6. for(Map<String,String> map : list){
  7. for (Map.Entry<String,String> entry : map.entrySet()) {
  8. String key = entry.getKey();
  9. String val = entry.getValue();
  10. //NULL字符串去判断控制
  11. if("NULL".equals(val) || StringUtils.isBlank(val)){
  12. //业务代码...
  13. }
  14. }
  15. }

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读