假设有一张表为test
create table test(
id number,
name varchar2(80),
age number
);
查询语句是这样的
<select id="getById" parameterType="string" resultType="hashmap">
select name, age from test where id = #{id}
</select>
Mapper文件定义如下:
public List<HashMap<String, String>> getById(String id);
假设返回一条记录
第一种情况
其name字段值为NULL,age字段不为NULL,那么程序接收到的List是这样的:List[{AGE=20}],List的长度为1,这里由于这条记录的name字段为NULL,不被映射。
第二种情况
name和age字段都为NULL,那么返回的List是这样的:List[null],但是List的长度仍然为1,因为查询到一条记录,只不过这条记录的name和age字段为NULL,由于NULL是不被映射的,既然两个字段都为NULL,于是这个HashMap便为null
实验结果表明,MyBatis查询语句中,当返回结果类型为HashMap时,若该记录的所有字段值都为NULL,那么该记录映射的HashMap为null;若该记录的所有字段值不全为NULL,那么为NULL的字段将不被映射到HashMap中,不为空的字段将会被映射到HashMap中,并且字段名称为key,字段值为value。
补充:oracle中空字符串就是NULL,而NULL在是不被映射到HashMap中的,所有不会出现这样的List([{NAME=}])
本文转自 手不要乱摸 51CTO博客,原文链接:http://blog.51cto.com/5880861/1394591