Mybatis自查询递归查找子菜单

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

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

先看一下数据库

Mybatis自查询递归查找子菜单_第1张图片

主键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="menuTree">
        <id column="id" property="id"/>
        <result column="parent_id" property="parentId"/>
        <result column="name" property="name"/>
        <result column="url" property="url"/>
        <collection property="children" ofType="Menu" column="id" select="getMenuChildren"/>
    resultMap>

    
    
    <select id="findAllRecursion" resultMap="menuTree">
        SELECT
            *
        FROM
            menu 
        WHERE
            parent_id IS NULL
    select>

    
    
    <select id="getMenuChildren" resultMap="menuTree">
        SELECT
            *
        FROM
            menu 
        WHERE
            parent_id= #{id}
    select>

Mybatis自查询递归查找子菜单_第2张图片
Tip:最近发现通过mybatis递归查找子菜单如果菜单比较多会非常耗时,可以通过mybatis一次性把所有菜单查找出来,再通过程序构建菜单树
构建菜单树的文章地址
java从数据库读取菜单,递归生成菜单树

你可能感兴趣的:(mybatis)