一 在数据库中添加实验数据
二 项目结构
三 具体实现
1.Treenode
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("treenode")
public class Treenode implements Serializable {
private static final long serialVersionUID = -37676887184407679L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "parent_id")
private Integer parentId;
@TableField(value = "name")
private String name;
@TableField(value = "weight")
private Integer weight;
}
2.TreenodeDao
/**
* (Treenode)表数据库访问层
*
* @author makejava
* @since 2023-04-19 16:01:44
*/
public interface TreenodeDao extends BaseMapper<Treenode> {
}
3.TreenodeService
/**
* (Treenode)表服务接口
*
* @author makejava
* @since 2023-04-19 16:01:44
*/
public interface TreenodeService extends IService<Treenode> {
/**
* hutool 工具树
* @return
*/
R hutoolTree();
}
4.TreenodeServiceImpl
/**
* (Treenode)表服务实现类
*
* @author makejava
* @since 2023-04-19 16:01:44
*/
@Service("treenodeService")
public class TreenodeServiceImpl extends ServiceImpl<TreenodeDao, Treenode> implements TreenodeService {
@Resource
private TreenodeDao treenodeDao;
@Override
public R hutoolTree() {
//1.配置树节点信息,指定key,可直接使用默认的key
TreeNodeConfig config = new TreeNodeConfig();
// 自定义属性名 都要默认值的
// config.setWeightKey("order");
config.setIdKey("id");
config.setChildrenKey("children");
// 最大递归深度
config.setDeep(3);
//2.查询数据
QueryWrapper<Treenode> queryWrapper = new QueryWrapper<>();
List<Treenode> treenodes = treenodeDao.selectList(queryWrapper);
//3.转为树结构,其中rootId参数代表根节点的父级id值
List<Tree<String>> treeList = TreeUtil.build(treenodes, "0", config, ((object, treeNode) -> {
//对key进行映射赋值
treeNode.setId(object.getId().toString());
treeNode.setParentId(object.getParentId().toString());
treeNode.setName(object.getName());
}));
return R.ok(treeList);
}
}
5.TreenodeController
/**
* (Treenode)表控制层
*
* @author makejava
* @since 2023-04-19 16:01:44
*/
@RestController
@RequestMapping("/api/treenode")
@Api(tags = "Treenode CRUD")
public class TreenodeController {
/**
* 服务对象
*/
@Resource
private TreenodeService treenodeService;
/**
* 查询树结构数据
*/
@ApiOperation("查询树结构数据")
@GetMapping("/tree")
public R tree() {
return treenodeService.hutoolTree();
}
}
6.工具类相关(ResultType 和 R)
public enum ResultType {
success(0),fail(1);
private int value;
private ResultType(int v){
this.value=v;
}
public int getValue() {
return value;
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {
private int code;
private String msg;
private Object data;
public static R ok(Object data){
return new R(ResultType.success.getValue(), "OK",data);
}
public static R ok(){
return ok(null);
}
public static R fail(String msg){
return new R(ResultType.fail.getValue(),msg,null);
}
public static R fail(){
return fail("FAIL");
}
}
7.启动类
8.yml文件相关配置
server:
port: 8080
spring:
datasource: #数据库
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///test
username: aaaa
password: 123421
type: com.alibaba.druid.pool.DruidDataSource
jackson: #json的配置
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
mvc:
pathmatch: #配置 接口文档
matching-strategy: ant_path_matcher
mybatis-plus:
mapper-locations: mapper/*.xml
9.相关jar包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope>
</dependency>
<!-- 接口文档 丝袜哥-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- 胡图工具-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<!-- 数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!-- 数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<!-- Mybatis-plus框架-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!-- 接口文档 丝袜哥-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>