UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【MyBatis】<![CDATA[...]]>ってなに?

MyBatisを使っていて、あるマッピングファイルをみたときにSELECT文が<![CDATA[...]]>で囲まれているのをみた

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.domain.repository.todo.TodoRepository">

    <!-- (2) -->
    <select id="findAllByCriteria" parameterType="TodoCriteria" resultType="Todo">
        <![CDATA[
        SELECT
            todo_id,
            todo_title,
            finished,
            created_at,
            version
        FROM
            t_todo
        WHERE
            todo_title LIKE #{title} || '%' ESCAPE '~'
        AND
            created_at < #{createdAt}
        ORDER BY
            todo_id
        ]]>
    </select>

</mapper>

<![CDATA[...]]>が何かわからなかったので調べた

CDATAセクション

atmarkit.itmedia.co.jp

<![CDATA[...]]>はCDATAセクションというらしい

MyBatisというより、XMLの記述方式だった

XML内で"<"や">"などを使う場合、何もしないければ"<"や">"などにエスケープすることが必要だがそれでは可読性が損なわれる

そこで、CDATAセクションを使用すると、"<"や">"のまま使えるようになるらしい

上記例では、created_atに対する条件として"<"を使用しているため、CDATAセクションを指定している

他参考

https://terasolunaorg.github.io/guideline/5.0.2.RELEASE/ja/ArchitectureInDetail/DataAccessMyBatis3.html