Mybatisを用いた開発の場合、基本的にMapperXMLにSQLを記載することになる。
しかし、XMLファイルでは、不等号を表すのに利用する<
や>
は特別な意味を持ち、タグの開始や終了として解釈されてしまう。
改善策1.使用箇所をCDATAセクションで囲む
CDATAとは、「Character Data(文字データ)」の略で、CDATAセクション内の内容は通常のXMLパースルールを無視して、そのまま文字列として扱われる。
例:価格が300円未満の商品を抽出する
<select id="selectGoods" resultType="goodsResultmap">
SELECT
*
FROM
goods
WHERE
price <![CDATA[ < ]]> 300;
</select>
改善策2.SQL全体をCDATAセクションで囲む
<select id="selectGoods" resultType="goodsResultmap">
<![CDATA[
SELECT
*
FROM
goods
WHERE
price < 300;
]]>
</select>
改善策3:エンティティ参照を使用する
文字 | エンティティ参照 |
---|---|
< | < |
> | > |
& | & |
'(シングルクォーテーション) | ' |
"(ダブルクォーテーション) | " |
<select id="selectGoods" resultType="goodsResultmap">
SELECT
*
FROM
goods
WHERE
price < 300;
</select>