# 业务层接口
public interface SysRoleService extends IService<SysRole> {
/**
* 分页查询角色列表
* @param page 分页参数
* @param sysRole 条件查询对象,会取name属性值作为条件
* @return
*/
IPage<SysRole> selectPage(Page<SysRole> page, SysRole sysRole);
}
# 业务层实现
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
@Override
public IPage<SysRole> selectPage(Page<SysRole> page, SysRole sysRole) {
return baseMapper.selectPage(page, sysRole);
}
}
# 控制层
@Controller
@RequestMapping("/role")
public class SysRoleController {
// url路径
private static final String HTML_PREFIX = "system/role/";
// 跳转到分页查询页面
@GetMapping(value = {"/", ""})
public String role() {
return HTML_PREFIX + "role-list";
}
// 角色业务对象
@Autowired
private SysRoleService sysRoleService;
// 分页查询
@PreAuthorize("hasAuthority('sys:role:list')")
@GetMapping("/page")
@ResponseBody
public MengxueguResult page(Page<SysRole> page, SysRole sysRole) {
return MengxueguResult.ok( sysRoleService.selectPage(page, sysRole) );
}
}
# 持久层接口
public interface SysPermissionMapper extends BaseMapper<SysPermission> {
List<SysPermission> findByRoleId(@Param("roleId") Long roleId);
}
# 持久层映射
<select id="findByRoleId" resultType="SysPermission">
SELECT
DISTINCT p.*
FROM
sys_permission p
JOIN sys_role_permission rp ON p.id = rp.permission_id
JOIN sys_role sr ON rp.role_id = sr.id
WHERE rp.role_id = #{roleId}
ORDER BY p.id
</select>
# 业务层接口
/**
* 通过角色id查询角色信息和所拥有权限信息
* @param id
* @return
*/
SysRole findById(Long id);
# 业务层实现
@Override
public SysRole findById(Long id) {
// 1. 通过角色id查询对应的角色信息
SysRole sysRole = baseMapper.selectById(id);
// 2. 通过角色id查询所拥有的权限
List<SysPermission> permissions = sysPermissionMapper.findByRoleId(id);
// 3. 将查询到的权限set到角色对象中SysRole
sysRole.setPerList(permissions);
return sysRole;
}
# 控制层接口
/**
* 跳转到新增或修改数据的页面
* @param id 如果传入id,则表示执行修改操作
* @param model
* @return
*/
@PreAuthorize("hasAnyAuthority('sys:role:add', 'sys:role:edit')")
@GetMapping(value={"/form", "/form/{id}"})
public String form(@PathVariable(required = false) Long id, Model model) {
// 通过角色id查询对应的角色信息和权限信息
SysRole role = sysRoleService.findById(id);
model.addAttribute("role", role);
return HTML_PREFIX + "role-form";
}
# 持久层接口
/**
* 通过角色id删除角色权限表中的所有记录
* @param roleId
* @return
*/
boolean deleteRolePermissionByRoleId(@Param("roleId") Long roleId);
/**
* 保存角色 与权限关系表数据
* @param roleId 角色id
* @param perIds 角色所拥有的权限
* @return
*/
boolean saveRolePermission(@Param("roleId") Long roleId,@Param("perIds") List<Long> perIds);
# 持久层映射
<!--通过角色id删除角色权限关系 表数据-->
<delete id="deleteRolePermissionByRoleId">
DELETE FROM sys_role_permission where role_id = #{roleId}
</delete>
<insert id="saveRolePermission">
INSERT INTO sys_role_permission(role_id, permission_id) VALUES
<foreach collection="perIds" item="item" index="index" separator=",">
(#{roleId}, #{item})
</foreach>
</insert>
# 业务层实现
/**
* 重写mybatis plus的saveOrUpdate方法
* @param entity
* @return
*/
@Transactional
@Override
public boolean saveOrUpdate(SysRole entity) {
entity.setUpdateDate(new Date());
// 1. 更新《角色表》中的数据
boolean flag = super.saveOrUpdate(entity);
if(flag) {
// 2. 先删除《角色权限关系表》中的数据
baseMapper.deleteRolePermissionByRoleId(entity.getId());
// 3. 新增《角色权限关系表》中的数据
if(CollectionUtils.isNotEmpty(entity.getPerIds())) {
baseMapper.saveRolePermission(entity.getId(), entity.getPerIds());
}
}
return flag;
}
# 控制层接口
/**
* 提交新增或者修改的数据
* @return
*/
@PreAuthorize("hasAnyAuthority('sys:role:add', 'sys:role:edit')")
@RequestMapping(method = {RequestMethod.POST, RequestMethod.PUT}, value = "")
public String saveOrUpdate(SysRole sysRole) {
sysRoleService.saveOrUpdate(sysRole);
return "redirect:/role";
}
# 业务层接口
/**
* 1. 通过id删除角色信息表数据
* 2. 通过id删除角色权限关系表数据
* @param id 角色id
* @return
*/
boolean deleteById(Long id);
# 业务层实现
@Transactional //事务管理
@Override
public boolean deleteById(Long id) {
// 1. 通过id删除角色信息表数据
baseMapper.deleteById(id);
// 2. 通过id删除角色权限关系表数据
baseMapper.deleteRolePermissionByRoleId(id);
return true;
}
# 控制层接口
/**
* 删除角色
* @param id
* @return
*/
@PreAuthorize("hasAuthority('sys:role:delete')")
@DeleteMapping("/{id}") // /role/{id}
@ResponseBody
public MengxueguResult deleteById(@PathVariable("id") Long id) {
sysRoleService.deleteById(id);
return MengxueguResult.ok();
}