• Mybatis自查询递归查找子菜单


    之前写过 java从数据库读取菜单,递归生成菜单树

    今天才发现mybatis也可以递归查询子菜单

    先看一下数据库

     

    主键id,名称name,父id,和url
    
    设计菜单类
    
    public class Menu {
        // 菜单id
        private String id;
        // 父菜单id
        private String parentId;
        // 菜单名称
        private String name;
        // 菜单url
        private String url;
        // 子菜单
        private List<Menu> children;
        // 省去getter setter和toString方法
    }

    menuDao

    public interface MenuDao {
    
        /**
         * 递归查找所有
         * 
         * @return
         */
        public List<Menu> findAllRecursion();
    }

    mapper.xml

     <resultMap type="Menu" id="recursionMenuMap">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <collection property="children" ofType="Menu" column="id" select="findMenuByParentId"/>
        </resultMap>
    
        <select id="findAllRecursion" resultMap="recursionMenuMap">
            SELECT id,`name`,parent_id,url FROM menu WHERE parent_id ='' or parent_id is NULL ORDER BY `order` ASC
        </select>
    
        <select id="findMenuByParentId" resultType="Menu">
            SELECT id,`name`,parent_id,url FROM menu WHERE parent_id = #{id} ORDER BY `order` ASC
        </select>

    其中findAllRecursion会查询到所有的父菜单,

    因为我们定义的

    <select id="findAllRecursion" resultMap="recursionMenuMap">

    而在recursionMenuMap中我们定义了如何去查找子菜单,调用findMenuByParentId

  • 相关阅读:
    sentinel.conf样例
    哨兵模式java实例
    哨兵模式启动redis
    华为笔试:直角三角形个数
    leetcode 337. 打家劫舍iii
    leetcode 494. 目标数
    leetcode 394. 字符串解码
    leetcode 128. 最长连续子序列
    链表快排
    leetcode 877. 石子游戏
  • 原文地址:https://www.cnblogs.com/mh-study/p/9796118.html
Copyright © 2020-2023  润新知