【Java】【MyBatis】Mybatisでincludeした際のpropertyの話。

Mybatisでincludeした際のpropertyの話。

 

interface.java

selectUserTable(@Param("id") String id, @Param("pw") String pw);

 

mapper.xml

<select id="selectUserTable">
<include refid="includeSql">
<property name="tblname" value="user_table"/>
</include>
</select>
<sql id="includeSql">
select
*
from
${ tblname } -- ←半角スペース有り
where
id = #{ id } -- ←半角スペース有り
and pw = #{ pw } -- ←半角スペース有り
</sql>

 私が現在参画しているプロジェクトでは埋め込む文字列に半角スペースを入れる(#{ id }とか#{ pw })書き方をしていた。

そのためこのような動的SQLを記述する時に指定するproperty(${ tblname })にも半角スペースを入れて記述していたのだが、この書き方だとエラーが発生する。

色々試した結果だが、includeタグ内で指定するパラメータには半角スペースが入っているとダメみたいだった。

mapper.xml

<select id="selectUserTable">
<include refid="includeSql">
<property name="tblname" value="user_table"/>
</include>
</select>
<sql id="includeSql">
select
*
from
${tblname} -- ←ここは半角スペースナシ
where
id = #{ id } -- ここは半角スペース有りでも良い
and pw = #{ pw } -- ここは半角スペース有りでも良い
</sql>

あとがき

MyBatisの公式ヘルプページからコードをコピーして実行したら正しく動作したので気づけた。

javaの定数クラスから文字列を埋め込むときにも半角スペースは許容されていたのでそこだとは思わなかった。

MyBatisの公式ヘルプページすごくわかりやすいので個人の記事とか行かなくても大抵解決するのありがたい。