Python 官方文档:入门教程 => 点击学习
目录前言😎实现思路😎完整代码总结-核心代码前言 不知道大家在做项目的时候有没有接触到将平平无奇数据结合处理成有层次的数据呢,类似下面这样 或者
不知道大家在做项目的时候有没有接触到将平平无奇数据结合处理成有层次的数据呢,类似下面这样
或者 生活处处都有,我想大家都应该接触过的,下面直接看怎么实现,我会大概讲一下思路,当然也可以直接跳到最后去看代码实现的哈
follow me!Go go go!
❗此篇文章也只是一个简单的学习记录,不详细的对代码进行讲解
首先一般数据库的模型设计如下
sql脚本
-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`uuid` varchar(64) NOT NULL,
`name` varchar(100) NOT NULL COMMENT '名称',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`parent_uuid` varchar(64) NOT NULL DEFAULT '-1' COMMENT '父亲 无父级为-1',
`level` varchar(10) NOT NULL COMMENT '产品层级',
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='产品表';
-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES ('1', '4dbf40d2-2af7-425c-a103-0349caaa26cf', '生产类', '1', '-1', '1', '2021-09-23 15:34:36');
INSERT INTO `product` VALUES ('2', '3062deff-8ec7-44c4-bd4e-88fe3c7b835c', '22', '1', '4dbf40d2-2af7-425c-a103-0349caaa26cf', '2', '2021-09-23 15:37:20');
INSERT INTO `product` VALUES ('3', '32afe426-9337-41c1-83e8-caf3248ba57e', '互联网信息', '2', '4dbf40d2-2af7-425c-a103-0349caaa26cf', '2', '2021-09-23 15:38:19');
INSERT INTO `product` VALUES ('4', '34c5239f-db2d-4394-b367-a57f8ae6f8ff', '33', '1', '3062deff-8ec7-44c4-bd4e-88fe3c7b835c', '3', '2021-09-23 15:53:29');
INSERT INTO `product` VALUES ('5', '19eedcd3-aa7f-4a2d-8182-d3f795e99b9d', '44', '1', '34c5239f-db2d-4394-b367-a57f8ae6f8ff', '4', '2021-09-23 15:53:56');
我们观察一下,可以发现我们的关注重点在name、uuid、parent_uuid上面:
下面就是我创建的模拟数据
想要实现数形状结构,肯定要以某一属性来作为突破口,它就是parent_uuid,那么到底是如何实现的 来看具体代码
只贴重点代码
首先使用了Mabatis-generator生成了通用后端代码,结构如下:
ProductController.class
package com.csdn.caicai.test.modules.product.controller;
import io.swagger.annotations.api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.WEB.bind.annotation.*;
import com.csdn.caicai.test.modules.product.dto.ProductRsp;
import com.csdn.caicai.test.modules.product.biz.IProductBiz;
import java.util.List;
@RestController
@Api(tags = {"产品表"})
@RequestMapping("/caicai/product")
@Validated
public class ProductController {
private static final Logger log = LoggerFactory.getLogger(ProductController.class);
@Autowired
private IProductBiz productBiz;
@ApiOperation(value = "产品树")
@RequestMapping(path = "/tree", method = RequestMethod.GET)
public List<ProductRsp> tree() {
return productBiz.tree();
}
}
IProductBiz.class
package com.csdn.caicai.test.modules.product.biz;
import com.csdn.caicai.test.modules.product.dto.ProductRsp;
import java.util.List;
public interface IProductBiz {
List<ProductRsp> tree();
}
ProductBiz.class
package com.csdn.caicai.test.modules.product.biz;
import org.apache.commons.lang3.StringUtils;
import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
import tk.mybatis.mapper.entity.Example;
import com.csdn.caicai.test.modules.product.service.IProductService;
import com.csdn.caicai.test.modules.product.dao.entity.ProductEntity;
import com.csdn.caicai.test.modules.product.dto.ProductReq;
import com.csdn.caicai.test.modules.product.dto.ProductRsp;
import static java.util.stream.Collectors.toList;
@Service("productBiz")
public class ProductBiz implements IProductBiz {
@Autowired
private IProductService productService;
public List<ProductEntity> selectByCondition(ProductReq productReq) {
Example example = new Example(ProductEntity.class);
//下面添加自定义收索条件
return productService.selectByExample(example);
}
@Override
public List<ProductRsp> tree() {
ProductReq req = new ProductReq();
List<ProductRsp> list = selectByCondition(req).stream().map(this::productConvert).collect(Collectors.toList());
return buildTree(list, req.getParentUuid());
}
private ProductRsp productConvert(ProductEntity e) {
ProductRsp orgnode = new ProductRsp();
orgNode.setId(e.getId());
orgNode.setUuid(e.getUuid());
orgNode.setName(e.getName());
orgNode.setLevel(e.getLevel());
orgNode.setSort(e.getSort());
orgNode.setParentUuid(e.getParentUuid());
return orgNode;
}
public static List<ProductRsp> buildTree(List<ProductRsp> all, String parentUuid) {
if (CollectionUtils.isEmpty(all))
return Lists.newArrayList();
List<ProductRsp> parentList = all.stream()
.filter(e -> StringUtils.isBlank(e.getParentUuid())
|| "-1".equals(e.getParentUuid())
|| e.getParentUuid().equals(parentUuid))
.collect(toList());
getSubList(parentList, all);
return parentList;
}
private static void getSubList(List<ProductRsp> parentList, List<ProductRsp> all) {
parentList.forEach(e -> {
List<ProductRsp> subList = all.stream().filter(o -> o.getParentUuid().equals(e.getUuid())).collect(toList());
e.setSubList(subList);
if (!CollectionUtils.isEmpty(subList))
getSubList(subList, all);
});
}
}
ProductReq.class
package com.csdn.caicai.test.modules.product.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "ProductReq", description = "产品表")
@Data
public class ProductReq implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "", name = "id")
private Long id;
@ApiModelProperty(value = "", name = "uuid")
private String uuid;
@ApiModelProperty(value = "名称", name = "name")
private String name;
@ApiModelProperty(value = "排序", name = "sort")
private Integer sort;
@ApiModelProperty(value = "父亲 无父级为-1", name = "parentUuid")
private String parentUuid;
@ApiModelProperty(value = "产品层级", name = "level")
private String level;
}
ProductRsp.class
package com.csdn.caicai.test.modules.product.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@ApiModel(value = "ProductRsp", description = "产品表")
@Data
public class ProductRsp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "", name = "id")
private Long id;
@ApiModelProperty(value = "", name = "uuid")
private String uuid;
@ApiModelProperty(value = "名称", name = "name")
private String name;
@ApiModelProperty(value = "排序", name = "sort")
private Integer sort;
@ApiModelProperty(value = "父亲 无父级为-1", name = "parentUuid")
private String parentUuid;
@ApiModelProperty(value = "产品层级", name = "level")
private String level;
@ApiModelProperty(value = "", name = "createTime")
private Date createTime;
@ApiModelProperty(value = "下属产品", name = "subList")
private List<ProductRsp> subList;
}
测试一下
可以看到,实现了我们的效果
上面罗里吧嗦,其实核心代码就是以下代码,亲们来试着理解一下,然后就可以在此基础上美化一下就好了:
ProductRsp、ProductReq 是实体类,可以自行替换里面的内容
private ProductRsp productConvert(ProductEntity e) {
ProductRsp orgNode = new ProductRsp();
orgNode.setId(e.getId());
orgNode.setUuid(e.getUuid());
orgNode.setName(e.getName());
orgNode.setLevel(e.getLevel());
orgNode.setSort(e.getSort());
orgNode.setParentUuid(e.getParentUuid());
return orgNode;
}
public static List<ProductRsp> buildTree(List<ProductRsp> all, String parentUuid) {
if (CollectionUtils.isEmpty(all))
return Lists.newArrayList();
List<ProductRsp> parentList = all.stream()
.filter(e -> StringUtils.isBlank(e.getParentUuid())
|| "-1".equals(e.getParentUuid())
|| e.getParentUuid().equals(parentUuid))
.collect(toList());
getSubList(parentList, all);
return parentList;
}
private static void getSubList(List<ProductRsp> parentList, List<ProductRsp> all) {
parentList.forEach(e -> {
List<ProductRsp> subList = all.stream().filter(o -> o.getParentUuid().equals(e.getUuid())).collect(toList());
e.setSubList(subList);
if (!CollectionUtils.isEmpty(subList))
getSubList(subList, all);
});
}
到此这篇关于JAVA如何把数据库的数据处理成树形结构的文章就介绍到这了,更多相关JAVA如何把数据库的数据处理成树形结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: JAVA如何把数据库的数据处理成树形结构
本文链接: https://lsjlt.com/news/136529.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0