树结构工具的使用(Springboot + MybatisPlus + hutool)

一 在数据库中添加实验数据

二  项目结构

三 具体实现 

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值