官网关于Mysql数据库中间表的修改方法

  • 表 角色表, 菜单表, 角色菜单中间表
  • 方法: 修改角色的菜单匹配
  • 思路1:触发器,假设更新就是新建,之前的全部删除,那么触发器的思路就是如果以前的某角色对应菜单不为空,全部删除,然后新建一批,就算是修改了,但是触发器会报错,重复注入
  • 思路2:不用触发器,实现上面的思路
  • 思路3:触发器,假设更新是更新删除标志,之前的全部删除标志设为-1,那么新的删除标志就是0,但是这样因为中间表是双主键,所以会造成重复注册,也失败
  • 思路4:这个主要是我在代码的实现,套用了列表修改,列表修改也是可以值修改一个的,这样可以进行复用,实现代码:
  public HttpResult update(@RequestBody List<SysRole> sysRoles, @RequestParam(value = "菜单编号") List<Long> menus){
        try{
            for(SysRole sysRole: sysRoles){


                if(menus != null){
                    int result = sysRoleService.updateRoleAndMenuDelFlag(sysRole.getId());
                    for(Long sysMenu: menus){
                        SysRoleMenu sysRoleMenu = new SysRoleMenu();
                        sysRoleMenu.setId(UUID.randomUUID().toString());
                        sysRoleMenu.setCreateBy(sysRole.getCreateBy());
                        sysRoleMenu.setRoleId(sysRole.getId());
                        sysRoleMenu.setMenuId(sysMenu);
                        sysRoleMenu.setCreateTime(new Date());
                        sysRoleMenu.setLastUpdateTime(new Date());
                        sysRoleMenu.setLastUpdateBy(sysRole.getCreateBy());
                        sysRoleMenu.setDelFlag((byte)0);
                        sysRoleMenu.setCreateBy(sysRoleMenu.getLastUpdateBy());
                        sysRoleService.saveRoleAndMenu(sysRoleMenu);
                    }
                }else{
                    sysRole.setLastUpdateTime(new Date());
                    sysRoleService.update(sysRole);
                }
            }

if 语句搞定,可能还有其他思路

发布了70 篇原创文章 · 获赞 29 · 访问量 6177

猜你喜欢

转载自blog.csdn.net/weixin_43404791/article/details/104725792
今日推荐