MyBatisの再帰的なクエリ
MyBatisのXxxxMapper.xmlファイルでは、レスポンスMapはオブジェクトの属性を指定して、SpringのIoCのように組み立てることができます.その中で重要なのは、assicationとcollectionの二つの要素です.
階層構造では、オブジェクトが親ノードを含み、サブノードを含むと相互参照または包含される場合があるが、この場合自体は問題ないのはJSONデータを生成する時だけで、少々乱れている可能性がある.
association – ; 。
– associations , 。
collection – , ArrayList 。
– collections , 。
地域を例にとると: <resultMap type="Area" id="areaMap">
<id column="area_id" property="area_id" />
<result column="name" property="name" />
<association property="parent" column="parent_id" select="selectParent">
</association>
<collection property="children" column="area_id" ofType="Area"
javaType="java.util.ArrayList" select="selectChildren"></collection>
</resultMap>
地域の親レベルの地域をどうやって取得しますか? <select id="selectParent" resultMap="areaMap" parameterType="int">
select * from area where area_id=#{parent_id}
</select>
地域のサブエリアはどうやって取得しますか? <select id="selectChildren" resultMap="areaMap" parameterType="int">
select * from area where parent_id=#{area_id}
</select>
地域を検索すると、地域の親レベル、サブレベルの情報が含まれます. <select id="selectArea" parameterType="int" resultMap="areaMap">
select * from area where area_id=#{id}
</select>
注意したいのは:階層構造では、オブジェクトが親ノードを含み、サブノードを含むと相互参照または包含される場合があるが、この場合自体は問題ないのはJSONデータを生成する時だけで、少々乱れている可能性がある.