微人事项目学习之导航菜单接口制作

学习SpringBoot+Vue前后端分离项目,原项目GitHub地址项目作者江雨一点雨博客

Meta

新建src/model/Meta类,将model/Menu中的keepAlive和requrieAuth移到Meta中
并在Menu中新增Meta和Children及其它们的getter和setter。

public class Meta {
    private Boolean keepAlive;

    private Boolean requireAuth;

    public Boolean getKeepAlive() {
        return keepAlive;
    }

    public void setKeepAlive(Boolean keepAlive) {
        this.keepAlive = keepAlive;
    }

    public Boolean getRequireAuth() {
        return requireAuth;
    }

    public void setRequireAuth(Boolean requireAuth) {
        this.requireAuth = requireAuth;
    }


}
private List<Menu> children;
private Meta meta;

在MenuMapper.xml中将

<result column="keepAlive" property="keepAlive" jdbcType="BIT"/>
<result column="requireAuth" property="requireAuth" jdbcType="BIT"/>

改为一对多关系

<association property="meta" javaType="org.javaboy.vhr.model.Meta">
      <result column="keepAlive" property="keepAlive" jdbcType="BIT"/>
      <result column="requireAuth" property="requireAuth" jdbcType="BIT"/>
</association>

Controller、Service和Mapper

创建controller/config/SystemConfigController

@RestController
@RequestMapping("/system/config") //注解别忘了
public class SystemConfigController {
    @Autowired
    MenuService menuService;

    @GetMapping("/menu")
    public List<Menu> getMenusByHrId(){
        return menuService.getMenusByHrId();
    }

}

创建Service

@Service
public class MenuService {
    @Autowired
    MenuMapper menuMapper;

    @Autowired
    MenuRoleMapper menuRoleMapper;
    public List<Menu> getMenusByHrId() {
        return menuMapper.getMenusByHrId(((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
    }


}

在MenuMapper中添加getMenusByHrId方法

List<Menu> getMenusByHrId(Integer hrId);

在MenuMapper.xml中添加SQL

<resultMap id="Menus2" type="org.javaboy.vhr.model.Menu" extends="BaseResultMap">
    <collection property="children" ofType="org.javaboy.vhr.model.Menu">
      <id column="id2" property="id" jdbcType="INTEGER" />
      <result column="url2" property="url" jdbcType="VARCHAR" />
      <result column="path2" property="path" jdbcType="VARCHAR" />
      <result column="component2" property="component" jdbcType="VARCHAR" />
      <result column="name2" property="name" jdbcType="VARCHAR" />
      <result column="iconCls2" property="iconCls" jdbcType="VARCHAR" />
      <result column="parentId2" property="parentId" jdbcType="INTEGER" />
      <result column="enabled2" property="enabled" jdbcType="BIT" />
      <association property="meta" javaType="org.javaboy.vhr.model.Meta">
        <result column="keepAlive2" property="keepAlive" jdbcType="BIT"/>
        <result column="requireAuth2" property="requireAuth" jdbcType="BIT"/>
      </association>
    </collection>
  </resultMap>
<select id="getMenusByHrId" resultMap="Menus2">
    select distinct m1.*,m2.`id` as id2,m2.`component` as component2,m2.`enabled` as enabled2,m2.`iconCls` as iconCls2,
    m2.`keepAlive` as keepAlive2,m2.`name` As name2,m2.`parentId` As parentId2,m2.`requireAuth` As requireAuth2,
    m2.`path` As path2 from menu m1,menu m2,hr_role hrr,menu_role mr where m1.`id`=m2.`parentId` and hrr.`rid`=mr.`rid`
    and hrr.`hrid`=#{hrid} and mr.`mid`=m2.`id` and m2.`enabled`=true order by m1.`id`,m2.`id`
</select>

查询语句建议现在数据库中写好,查询无误后,再写到xml中。
注意,在数据库中写时,将#{hrid}替换为想要查询的数字,例如3。

查询语句解析

其实看懂表的话,理解语句就很容易了。
首先来看一下有哪些表
表
我们需要用到的是hr,hr_role,role,menu,menu_role这几张表,hr是用户表,role是用户表,一个用户可以有多个角色嘛。hr_role是用户表和角色表的中间表。menu是菜单表,menu_role就是菜单和角色的中间表。
比如我们现在想知道某个用户能访问哪些菜单,hr的id已知,通过hr_role表可以获取到role表的id,下图为hr_role表,hrid为hr表的id,rid为role表的id。
hr_role
最后通过menu_role表获取到menu的id,下图为menu_role表,mid为menu表的id。
menu_role
启动项目,Postman登录,然后访问/system/config/menu,显示出菜单信息,测试成功。
menu测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值