基本菜单、层级管理
- 功能实现:根据父级菜单,查出所有子菜单
核心:parentId
- 新建SystemMenuQueryObject,存储parentId
- SQL都是内联查询,加parentId是否为空判断,用于query拼接
<sql id="conditions_sql">
<where>
<if test="parentId==null">
and child.parent_id is null
</if>
<if test="parentId!=null">
and child.parent_id =#{parentId}
</if>
</where>
</sql>
queryForCount/queryForList都需要,必须使用左外连接,否则父菜单为空时查询不出来
<include refid="conditions_sql"/>
- 新增、编辑、查看下级都与父级菜单有关,都要传parentId
Controller
-
List方法
- 查询出此级的父级菜单
- 新建Map集合,将父级菜单的name和id封装,获取父菜单的父菜单,重复上一步操作
获取父菜单的父菜单,必须从数据库中查询,以保留超过两级的父菜单。 parent = systemMenuService.selectByPrimaryKey(parent.getParent().getId());
- 将集合中的元素顺序颠倒,往模型中增加parents集合
public String list(Model model, @ModelAttribute("qo") SystemMenuQueryObject queryObject) { //查询出所有的父级菜单 SystemMenu parent = systemMenuService