如果表里有一列是设置父级ID,那么我们可以根据这个父级ID进行递归,最后成为返回父子集合的list。


下面是贴上mapper的代码,我们最后只需要调用getAllMenu,就可以返回List<Menu>

<resultMap type="com.example.demo.entity.Menu" id="menuTree">
    <id column="menuId" property="menuId"/>
    <result column="menuName" property="menuName"/>
    <result column="menuAddr" property="menuAddr"/>
    <result column="menuSts" property="menuSts"/>
    <result column="menuSort" property="menuSort"/>
    <result column="menuImg" property="menuImg"/>
    <collection property="children" ofType="com.example.demo.entity.Menu" column="menuId" select="getMenuChildren"/>
</resultMap>
<!-- 先查询菜单根级目录 -->
<!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
<select id="getAllMenu" resultMap="menuTree">
    SELECT m1.menuId,m1.menuName,m1.menuAddr,m1.menuSts,m1.menuSort,m1.menuImg
    FROM
    menu m1
    WHERE m1.supMenuId=0
</select>

<!-- 再利用上次查询结果colliection中column的值cid做递归查询,查出所有子菜单 -->
<!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
<select id="getMenuChildren" resultMap="menuTree">
    SELECT m2.menuId,m2.menuName,m2.menuAddr,m2.menuSts,m2.menuSort,m2.menuImg
    FROM menu m2
    WHERE m2.supMenuId=#{menuId}
</select>

Logo

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

更多推荐