之前寫過 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