假设有一张表为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=}])