MyBatis中的递归查询

在MyBatis的XxxMapper.xml文件中,resultMap可以指定对象的属性是如何装配的,类似于Spring中的IoC。其中比较关键的是association和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数据时,可能会(让人)有些凌乱。


转载于:https://my.oschina.net/freekeeper/blog/647132

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值