MyBatisの再帰的なクエリ


MyBatisのXxxxMapper.xmlファイルでは、レスポンスMapはオブジェクトの属性を指定して、SpringのIoCのように組み立てることができます.その中で重要なのは、assicationとcollectionの二つの要素です.
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データを生成する時だけで、少々乱れている可能性がある.