mybatis的使用技巧3——mybatis如何实现树形结构查询及其一对多和递归功能查询详解

本文介绍了在MyBatis中如何高效地处理父子集关系查询,包括树形结构和一对多数据集的递归查询,通过示例展示了如何利用JavaType,ofType,resultMap和collection标签进行一对一和一对多的查询,以及自动映射的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目开发过程中,存在大量的父子集关系查询。

例如需要查询树形结构,一对多的数据集,递归查询如省市区县镇层级联动等业务时,都可以参考如下的写法,无需在代码中动态遍历赋值,效率高,易用性强。

要查询如图所示的数据,详细的实现方式参考如下:

如果要查询一对一可参照如下案例,基本写法与处理一对多的思路类似:

mybatis的使用技巧5——查询一对一数据(javaType和ofType用法区别)

1.存在如下mapper接口:
List<TreeInfo> getTreeInfoObj(TreeInfo TreeInfo);
2.mapper接口对应的xml写法如下:
<select id="getTreeInfoObj" resultMap="ModulesTreeMap" parameterType="com.test.system.entity.TreeInfo">
        select syi.*
        from tree_info syi
        <where>
            syi.del_flag = 0 and syi.status = -1
            <if test="parentId != null">
                and syi.parent_id = #{parentId}
            </if>
        </where>
        order by syi.level asc
    </select>
3.详细的resultMap写法如下,其中需要注意resultMap中的collection属性:
<resultMap id="ModulesTreeMap" type="com.test.system.entity.TreeInfo" autoMapping="true" >
        <result property="id"    column="id"  />
        <collection column="id" property="children"
                    ofType="com.test.system.entity.TreeInfo"
                    select="getTreeInfoByParentId" autoMapping="true">
        </collection>
    </resultMap>
详细<collection />标签说明,很重要!!!
  • column:子查询的动态参数,也就是需要关联查询的筛选条件,注意看子查询的取值
  • property:父级对象的属性名称,也就是ColumnInfo下的属性名称
  • ofType:子查询映射的数据类型
  • select:子查询的mapper接口id,也就是对应的方法名
  • autoMapping:开启自动映射,相当于数据库和属性名称按驼峰名称规则自动映射
4.子查询对应的xml写法:

注意#{id},其中的id须和<collection />标签的column属性一致

<select id="getTreeInfoByParentId" resultType="com.test.system.entity.TreeInfo">
        select syichi.*
        from tree_info syichi
        <where>
            syichi.del_info = 0 and syichi.parent_id = #{id}
        </where>
        order by syichi.level asc
    </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值