如果表里有一列是设置父级ID,那么我们可以根据这个父级ID进行递归,最后成为返回父子集合的list。
下面是贴上mapper的代码,我们最后只需要调用getAllMenu,就可以返回List<Menu>
<resultMap type="com.example.demo.entity.Menu" id="menuTree">
<id column="menuId" property="menuId"/>
<result column="menuName" property="menuName"/>
<result column="menuAddr" property="menuAddr"/>
<result column="menuSts" property="menuSts"/>
<result column="menuSort" property="menuSort"/>
<result column="menuImg" property="menuImg"/>
<collection property="children" ofType="com.example.demo.entity.Menu" column="menuId" select="getMenuChildren"/>
</resultMap>
<!-- 先查询菜单根级目录 -->
<!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
<select id="getAllMenu" resultMap="menuTree">
SELECT m1.menuId,m1.menuName,m1.menuAddr,m1.menuSts,m1.menuSort,m1.menuImg
FROM
menu m1
WHERE m1.supMenuId=0
</select>
<!-- 再利用上次查询结果colliection中column的值cid做递归查询,查出所有子菜单 -->
<!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
<select id="getMenuChildren" resultMap="menuTree">
SELECT m2.menuId,m2.menuName,m2.menuAddr,m2.menuSts,m2.menuSort,m2.menuImg
FROM menu m2
WHERE m2.supMenuId=#{menuId}
</select>
还没有评论,来说两句吧...