昨日の続き。
2テーブルをJOINして返却する実装を行う。
流れ
- 2テーブルを結合した受け口になるEntityクラスを作る
- DBとJavaを繋ぐMapperクラス(interface)を作る
- SQLの実装を書くMapperファイル(XML)を作る
感想としては、、、XMLがミスっていると実行時にエラーとなるので問題を見つけるのが大変。
特に返却値を定義する<resultMap>の書き方は、MyBatisのドキュメントを見つつ作成したけど、生産性良くない。
記法を覚えたので、今後は良くなるかな?
JOINした結果を、それぞれオブジェクトに分けるには<collection>タグを使用(集合になる場合は要素にjavaType="ArrayList"入れてね)。
ハマった点
現象:実行時、Mapperクラスで[NoSuchBeanDefinitionException]
原因:Mapper.xmlを手作成する時、自動作成した物を元にしたので<select>タグ内の返却値型の定義<resultType>を使っていた
解決策:<resultType>⇒<resultMap>に変更
現象:xmlのwhere句で、CheckStyleエラー「要素のコンテンツは、整形式の文字データまたはマークアップから成るものでなければなりません」
原因:「hoge <= #{hoge}」のように「<」を使っていた(コンパイラにタグだと思われた)
解決策:<![CDATA[]]>でwhere句を囲む
(参照:http://www.taosoftware.co.jp/blog/2006/03/ibatissqlmap.html)
例
<where>
<![CDATA[
AND from <= #{hoge}
AND to >= #{hoge}
]]>
</where>