今天做分类的时候需要用到的这个树形组件,顺便记录一下使用的方法,方便以后再次使用
hutool版本
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.16</version>
</dependency>
实现的方法
public List<Tree<String>> findProductCats() {
Set<Long> catIds = new HashSet<>();
for (int i = 0; i < 888; i++) {
catIds.add((long) RandomUtil.randomInt(1, 666));
}
// 查询分类信息(数据库查到的数据,这里的id是我自己随机生成的用于测试的)
List<ProductCategory> catInfos = productCategoryMapper.selectList(new QueryWrapper<ProductCategory>().in("id", catIds));
// 设置参数
List<TreeNode<String>> collect = catInfos.stream().map(item ->
new TreeNode<String>().setId(item.getId())
.setName(item.getName())
.setParentId(item.getParentId())
.setWeight(item.getSort())).collect(Collectors.toList());
// 配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setWeightKey("sort");
treeNodeConfig.setIdKey("id");
treeNodeConfig.setChildrenKey("childrenNode");
// 最大递归深度
treeNodeConfig.setDeep(3);
return TreeUtil.build(collect, "0", treeNodeConfig,
(treeNode, tree) -> {
tree.setId(treeNode.getId());
tree.setParentId(treeNode.getParentId());
tree.setWeight(treeNode.getWeight());
tree.setName(treeNode.getName());
});
}
实体类
@Data
public class ProductCategory {
private String id;
private String parentId;
private String name;
private Integer level;
private Integer sort;
}
表结构
CREATE TABLE `product_category` (
`id` varchar(20) NOT NULL COMMENT '分类id',
`parent_id` varchar(20) DEFAULT NULL COMMENT '上级分类的编号:0表示一级分类',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '分类名称',
`level` int(11) DEFAULT NULL COMMENT '分类级别:1->1级;2->2级',
`sort` int(11) DEFAULT '0' COMMENT '排序',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=744 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='商品分类';