- 表 角色表, 菜单表, 角色菜单中间表
- 方法: 修改角色的菜单匹配
- 思路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 语句搞定,可能还有其他思路