MyBatisで#と$の違い

MyBatisiBATIS(MyBatis)

MyBatisで#と$の違い

MyBatis3.0.4で#と$の違いについてです。

${aaa}・・・aaaの値をそのまま出力する

#{aaa}・・・エスケープや、文字列の場合はシングルクォーテーションで囲ってくれる

上記の違いがあります。

<select id="selectA" parameterType="map" resultType="map">
  SELECT AA, BB
  FROM ${schema}.TB_A AS A
  WHERE A.COLUMN = #{id}
</select>

上記のようにスキーマなどの場合はシングルクォーテーションで囲まれると困るので、$にするのが正しいです。

parameterTypeがmapなので、Java側ではMapを渡します。

resultTypeもmapなので、Java側では戻り値もMapです。

以下、Java側のイメージです。

Map cond = new HashMap<String, String>();
cond.put("schema","~~");
cond.put("id", "~~");
Map ret = (Map<String, String>) session.selectOne("selectA", cond);

コメント

タイトルとURLをコピーしました