项目中经常遇到需要递归查询子级结构的时候,比如省、市、区、乡镇、街道等,通过java写可能有的时候比较乱,但利用mybatis自带的查询可直接实现。

数据库表

在这里插入图片描述

VO类

在这里插入图片描述

XML写法

<resultMap id="TestMap" type="com.vo.TestVO">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <collection property="children" javaType="ArrayList" ofType="com.vo.TestVO"
                    select="selectChildren" column="id">
        </collection>
    </resultMap>
    <select id="testSelect" resultMap="TestMap">
        select * from test where parent_id = 0
    </select>
    <select id="selectChildren" resultMap="TestMap">
        select * from test where parent_id = #{id}
    </select>

需注意部分
“select”:为子查询的id。
“column”:为传递给子查询的字段名。
“resultMap”:为查询的返回map,因需递归查询,此处必须写返回map,不能写具体的类路径。如果子查询(图中selectChildren)写具体的类路径,则只会返回一层子结构。

结果

在这里插入图片描述

在这里插入图片描述

注:因为方法为查询自身结构,所以resultMap为同一个,当需查询另一张表时,另外单独建一个resultMap即可。

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐