一、场景:
程序中需要用List<Map>接受返回值,返回值Map中value存在null空值,在遍历时获取key时,返回null,相当于不存在key,直接抛出了nullpointexception…
二、概述:
1)如果返回值是List<Map>类型,Mybatis会默认自动过滤掉value为null的字段。
2)Mybatis在默认情况下,结果集解析生成Map,如果value为null,那么key不会被加入到map中,所以map接收结果时就没有value为null的键值。
三、解决方案:
1)配置文件(大型项目都是统一配置,很难去修改)
<settings>
<!-- 设置返回HashMap,字段值为null时保存key,如果不设置默认是false -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
2)返回NULL字符串代替,在java中解析时用字符串判断校验
--用nvl函数判断转换成字符串'NULL'
SELECT C.CONS_NO, NVL(D.CUST_NO,'NULL') CUST_NO, NVL(C.CUST_NAME,'NULL') CUST_NAME
FROM C_CUST D,C_CONS C
WHERE C.CUST_ID = D.CUST_ID(+)
List<Map<String,String>> list = dao.queryConsInfo();
for(Map<String,String> map : list){
for (Map.Entry<String,String> entry : map.entrySet()) {
String key = entry.getKey();
String val = entry.getValue();
//NULL字符串去判断控制
if("NULL".equals(val) || StringUtils.isBlank(val)){
//业务代码...
}
}
}