数据库中ID/ParentID模式的数据如何快速生成树形结构

在数据库设计中,通常使用ID/PID这样的模式表示上下级关系,最常见的就是category表的设计,比如

CREATE TABLE IF NOT EXISTS `item`.`item_category` (
  `item_category_id` BIGINT UNSIGNED NOT NULL,
  `store_id` BIGINT UNSIGNED NOT NULL COMMENT '所属店铺ID',
  `category_name` VARCHAR(45) NOT NULL COMMENT '分类名称',
  `parent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父级分类ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `create_user_id` BIGINT UNSIGNED NOT NULL,
  `last_modify_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `last_modify_user_id` BIGINT UNSIGNED NOT NULL,
  `is_deleted` BIGINT UNSIGNED NOT NULL DEFAULT 0,
  PRIMARY KEY (`item_category_id`)
)
COMMENT = '商品分类'

使用parent_id表示上级分类,这种表示上下级的方式在数据库设计中很通用,因此,是否有种方式将这种结构快速的生成树形结构呢?

IdPidEntryTreeBuilder
用于将具有ID/PID这种结构的数据生成Tree,比如保存省市县的数据

IntIdPidEntry china = new IntIdPidEntry(1, rootId, "中国");

IntIdPidEntry hunan_province = new IntIdPidEntry(2, 1, "湖南省");
IntIdPidEntry zhangjj = new IntIdPidEntry(3, 2, "张家界市");
IntIdPidEntry changsha = new IntIdPidEntry(4, 2, "长沙市");
IntIdPidEntry sangzhi = new IntIdPidEntry(5, 3, "桑植县");

IntIdPidEntry guangdong_province = new IntIdPidEntry(7, 1, "广东省");
IntIdPidEntry guangzhou = new IntIdPidEntry(8, 7, "广州市");
IntIdPidEntry tianhe = new IntIdPidEntry(12, 8, "天河区");
IntIdPidEntry dongguan = new IntIdPidEntry(9, 7, "东莞市");

IntIdPidEntry hubei_province = new IntIdPidEntry(10, 1, "湖北省");
IntIdPidEntry yunan_province = new IntIdPidEntry(11, 1, "云南省");

我们只需要将这些数据使用IdPidEntryTreeBuilder add到给定的Tree中即可

List elements = getElements();  // 上面的数据列表
Tree tree = new MappedTree<>();
IdPidEntryTreeBuilder builder = new IdPidEntryTreeBuilder<>();
builder.add(tree, elements, mapper); // 将数据add到树中即可生成树形结构

Github地址

Java中台项目
一个绝对面向对象编程的中台项目,拒绝面条代码。

代码所在具体程序包

你可能感兴趣的:(java,mysql)