问题具体描述:
最近在做一个对接国家的定时任务上传,按照文档要求的XML格式将本地数据生成XML,然后上传,在生成XML的时候,发现里面缺少了很多标签,缺少的标签那些字段的值也为空,所以就DEBUG,查询了一下问题。
SQL如下:
<select id="query" resultType="java.util.HashMap">
SELECT ID AS "Id",name AS "userName",phone AS "telePhone" FROM TABLE WHERE ID=#{id}
</select>
经过DEBUG,发现,该SQL在查询数据的时候,会将字段对应值为空的那些字段不能封装到map中,解释一下,按照我的SQL,我的map里面应该始终存在三个key
和三个value
,但是事实是,当我的某个字段值为空时,返回的map
中是不包含该字段作为key
。所以导致我最后生成XML的时候,缺少标签。
最后在google的帮助下,发现是因为我的mybatis-config.xml
中缺少一个设置,设置如下所示:
<settings>
<!--如果字段值为null的时候,也会返回该字段,只是对应的值为null-->
<setting name="callSettersOnNulls" value="true"/>
</settings>
(mybatis 3.2+
使用这个方法可以修复上面提到的问题)
总结:讲述如何修复mybatis中,返回类型为map,且value为空时,key也不会被封装到map中的问题。