@Resource
private MenuMapper menuMapper;
@Override
public List<AdminPrivilegeVO> getPrivilegeAll(Integer status) {
// 擷取所有根節點
List<AdminPrivilegeVO> list = menuMapper.selectRootNode(status);
List<AdminPrivilegeVO> result = new ArrayList<>();
for (AdminPrivilegeVO adminPrivilegeVO:list) {
if (adminPrivilegeVO.getId() != 0){
AdminPrivilegeVO privilegeVO = getTree(adminPrivilegeVO);
if (privilegeVO != null){
result.add(privilegeVO);
}
}
}
return result;
}
/**
* 擷取所有子節點的資料
* @param adminPrivilegeVO
* @return
*/
public AdminPrivilegeVO getTree(AdminPrivilegeVO adminPrivilegeVO){
List<AdminPrivilegeVO> list = menuMapper.selectByParentId(adminPrivilegeVO.getId());
if (!list.isEmpty()){
adminPrivilegeVO.setChildren(list);
for (AdminPrivilegeVO privilegeVO:list) {
if (privilegeVO.getId() != 0){
getTree(privilegeVO);
}
}
}
return adminPrivilegeVO;
}
Mapper:
<select id="selectRootNode" resultType="org.jingning.emergency.model.response.admin.AdminPrivilegeVO">
select * from t_menu where parent_id = 0
</select>
<select id="selectByParentId" resultType="org.jingning.emergency.model.response.admin.AdminPrivilegeVO">
select * from t_menu where parent_id = #{id}
</select>
ps: 正式項目别使用select * 這種方式
VO:
@Getter
@Setter
@ApiModel
public class AdminPrivilegeVO {
@ApiModelProperty(value = "記錄ID")
private Integer id;
@ApiModelProperty("權限名稱")
private String name;
@ApiModelProperty("權限路徑")
private String url;
@ApiModelProperty("上級id")
private Long parentId;
@ApiModelProperty("權限集合")
List<AdminPrivilegeVO> children;
}