假設有一張表為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