MyBatisでnull項目の取得ではまった
今日Mybatisではまったこと。 以下のような値がnullの項目を含むレコードをselect。resultTypeにはMapを指定。
id | user_name | mail_address |
---|---|---|
4 | 山田 太郎 | (null) |
取得結果をダンプしてみると、mail_address列はMapのキーが作られていない!
[{id=4, user_name=山田 太郎}]
もちろんmail_address列をselectしている。
SELECT id, user_name, password, mail_address FROM emply WHERE id = #{id}
公式HPを調べてみるとMyBatisには'callSettersOnNulls'というオプションがあって、defaultはfalseになっていてnull項目はMapにputしないとのこと。
取得した値が null の場合にセッターあるいは Map の put メソッドを呼び出すかどうかを指定します。 この設定は Map.keySet() や null 値による初期化を利用している場合に有用です。プリミティブ型(int, boolean, 等)に null がセットされることはありません。
試しに設定ファイルに以下を追加したらnullの項目も取得できるようになった。
<settings> <setting name="callSettersOnNulls" value="true"/> </settings>
nullの項目はnullが取得できるの普通だと思うのでデフォルトが逆なんじゃないかと思うのだが、 今開発中のシステムの設定値をいまさら変えられんし、うーんどうしよう。