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>
共有 0 条评论