本文共 5175 字,大约阅读时间需要 17 分钟。
表结构
SQL结构和数据
DROP TABLE IF EXISTS `demo`;CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO `demo` VALUES ('1', '0', 'A');INSERT INTO `demo` VALUES ('2', '1', 'B');INSERT INTO `demo` VALUES ('3', '1', 'C');INSERT INTO `demo` VALUES ('4', '2', 'D');INSERT INTO `demo` VALUES ('5', '2', 'E');INSERT INTO `demo` VALUES ('6', '3', 'F');INSERT INTO `demo` VALUES ('7', '3', 'G');
Pom文件
org.springframework.boot spring-boot-starter-web com.alibaba druid 1.1.1 mysql mysql-connector-java 5.1.39 org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0
application.properties文件
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/treespring.datasource.username=rootspring.datasource.password=1234spring.datasource.driver-class-name=com.mysql.jdbc.Driver
TreeMapper
@Mapperpublic interface TreeMapper { @Select("select * from demo") ListgetAll(); }
对应数据库的Tree实体类
public class Tree { private Integer id; private Integer pid; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getPid() { return pid; } public void setPid(Integer pid) { this.pid = pid; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Tree{" + "id=" + id + ", pid=" + pid + ", name='" + name + '\'' + '}'; }}
NewTree,定义返回给前段的树类型,根据业务不同自行修改(这里为了简单起见,只修改了id和pid的类型)
public class NewTree { private String id; private String pid; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Tree{" + "id=" + id + ", pid=" + pid + ", name='" + name + '\'' + '}'; }}
MenuTreeUtil,递归构造树形结构
@Componentpublic class MenuTreeUtil { //已经被buildTree的list集合 private ListmenuCommon; //返回给前端的NewTree List集合 private List
TreeController
@Controllerpublic class TreeController { @Resource TreeMapper treeMapper; @Resource MenuTreeUtil menuTreeUtil; @RequestMapping(value = "/menuList",method = {RequestMethod.GET}) @ResponseBody public String getTree() throws Exception { Listlist = buildTree(treeMapper.getAll()); List menuList = menuTreeUtil.menuList(list); System.out.println(menuList); return "YES"; } //将实体类,变成标准的树结构,即NewTree类型 private List buildTree(List list){ List newTrees = new LinkedList<>(); for(Tree tree:list){ NewTree newTree = new NewTree(); newTree.setId(String.valueOf(tree.getId())); newTree.setPid(String.valueOf(tree.getPid())); newTree.setName(tree.getName()); newTrees.add(newTree); } return newTrees; }}
启动项目,并在地址栏输入如下地址即可
结果展示(JSON在线解析)
[{ id = 1, name = A, pid = 0, childList = [{ id = 2, name = B, pid = 1, childList = [{ id = 4, name = D, pid = 2, childList = [] }, { id = 5, name = E, pid = 2, childList = [] }] }, { id = 3, name = C, pid = 1, childList = [{ id = 6, name = F, pid = 3, childList = [] }, { id = 7, name = G, pid = 3, childList = [] }] }]}]
参考
转载地址:http://bqazi.baihongyu.com/