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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM