Mybatis单表多级联查

内容纲要

菜单层次查询

entity菜单;类

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方法
}

Dao层 MenuDao

public interface MenuDao {

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

mapper映射文件MenuDao.xml

<!-- 这里的id的值作为下面的查询返回结果resultMap的值 -->
    <!-- collection中的column属性可以为多个值,这里只有一个,它作为下面递归查询传递进去的参数 -->
    <!-- ofType和javaType属性正好联合构成了数据Bean类Category中的childrenList属性的数据类型 -->
    <!-- select的值为下面递归查询的select标签的id值 -->
    <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>
    <!-- 先查询菜单根级目录 -->
    <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
    <select id="findAllRecursion" resultMap="menuTree">
        SELECT
            *
        FROM
            menu
        WHERE
            parent_id IS NULL
    </select>
    <!-- 再利用上次查询结果colliection中column的值cid做递归查询,查出所有子菜单 -->
    <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
    <select id="getMenuChildren" resultMap="menuTree">
        SELECT
            *
        FROM
            menu 
        WHERE
            parent_id= #{id}
    </select>
THE END
分享
二维码
< <上一篇
下一篇>>