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

一、场景:

程序中需要用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)){
            //业务代码...
        }
    }
}
发布了66 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq125281823/article/details/103942980