需求:字典数据,父类和子类数据,通过parentCode关联;
实现代码:
1.先查询所有数据,然后在逻辑层处理封装;这样不会每次都进行循环查询了,降低了数据库的压力;
实体类:
@Data
public class XykFileCategoryDto {
private Long id;
private String label;
private String code;
private String parentCode;
private Integer sort;
private String createUserCode;
//商品属性级联
private List<XykFileCategoryDto> children;
}
逻辑层处理:
@Override
public List<XykFileCategoryDto> withChildren(XykFileCategoryVo xykFileCategoryVo) {
// 先查询所有的数据 再进行数据封装
List<XykFileCategoryDto> list = xykFileCategoryMapper.selectAllCategoryList(xykFileCategoryVo);
//新建一个用于接收数据的list
List<XykFileCategoryDto> resultList = new ArrayList<>();
for (XykFileCategoryDto result : list) {
// 0是一级分类,没有父级
if ("0".equals(result.getParentCode())) {
//调用方法给子类添加数据
resultList.add(result);
}
}
// 为根节点菜单设置子菜单
for (XykFileCategoryDto nav : resultList) {
List<XykFileCategoryDto> childList = getChildMenu(nav.getCode(), list);
nav.setChildren(childList);
}
return resultList;
}
private List<XykFileCategoryDto> getChildMenu(String code, List<XykFileCategoryDto> list) {
List<XykFileCategoryDto> childList = new ArrayList<>();
for (XykFileCategoryDto nav : list) {
if (nav.getParentCode().equals(code)) {
childList.add(nav);
}
}
// 递归
for (XykFileCategoryDto dto : childList) {
dto.setChildren(getChildMenu(dto.getCode(), list));
}
if (childList.size() == 0) {
return new ArrayList<>();
}
return childList;
}
然后可以实现树形结构的展示:
"code": 0,
"data": [
{
"id": 5,
"label": "规章制度",
"code": "102000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": [
{
"id": 6,
"label": "银行制度-测试数据",
"code": "102001",
"parentCode": "102000",
"sort": 1,
"createUserCode": "sysadmin",
"children": [
{
"id": 38,
"label": "测试1121",
"code": "102002",
"parentCode": "102001",
"sort": 1,
"createUserCode": "sysadmin",
"children": [
{
"id": 37,
"label": "制度发文测试数据-测试数据-测试数据",
"code": "102003",
"parentCode": "102002",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
}
]
}
]
},
{
"id": 7,
"label": "国家制度规范-测试数据",
"code": "102002",
"parentCode": "102000",
"sort": 1,
"createUserCode": "sysadmin",
"children": [
{
"id": 37,
"label": "制度发文测试数据-测试数据-测试数据",
"code": "102003",
"parentCode": "102002",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
}
]
}
]
},
{
"id": 28,
"label": "视频管理-测试数据",
"code": "103000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 30,
"label": "重要通知",
"code": "104000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 31,
"label": "业务章程、领用合约",
"code": "105000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 32,
"label": "指导意见",
"code": "106000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 33,
"label": "人员管理",
"code": "107000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 34,
"label": "人员管理",
"code": "108000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 35,
"label": "经营分析",
"code": "109000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
},
{
"id": 36,
"label": "培训课件",
"code": "110000",
"parentCode": "0",
"sort": 1,
"createUserCode": "sysadmin",
"children": []
}
],
"message": "ok"
}