官网关于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 语句搞定,可能还有其他思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值