springboot 整合 mybatis plus -- 树状图


先根据 springboot 整合 mybatis plus  这篇生成各种文件

controller:

package com.lifan.controller;


import com.lifan.service.AcUserTreeService;
import com.lifan.vo.AcUserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * 

* 前端控制器 *

* *
@author lifan * @since 2021-07-09 */ @RestController public class AcUserTreeController { @Autowired private AcUserTreeService acUserTreeService; @PostMapping("/treeQuery") public List SspFxProQuery() { List fxCompanyVos = acUserTreeService.formulaClothClassGetTree(); return fxCompanyVos; } }

service:

package com.lifan.service;

import com.lifan.vo.AcUserVo;
import java.util.List;

/**
 * 

* 服务类 *

* *
@author lifan * @since 2021-07-09 */ public interface AcUserTreeService { List formulaClothClassGetTree(); }

AcUserTreeServiceImpl :

package com.lifan.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lifan.entity.AcUserTree;
import com.lifan.mapper.AcUserTreeMapper;
import com.lifan.service.AcUserTreeService;
import com.lifan.vo.AcUserVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

/**
 * 

* 服务实现类 *

* *
@author lifan * @since 2021-07-09 */ @Service public class AcUserTreeServiceImpl implements AcUserTreeService { @Autowired private AcUserTreeMapper acUserTreeMapper; public List formulaClothClassGetTree() { QueryWrapper queryWrapper = new QueryWrapper(); //只查询 启用状态的 // queryWrapper.eq("`show`",'Y'); List list = acUserTreeMapper.selectList(queryWrapper); List list1 = new ArrayList(); for(AcUserTree sspFxCompany : list){ AcUserVo fxCompanyVos = new AcUserVo(); if(sspFxCompany.getPid().equals("1")){ BeanUtils.copyProperties(sspFxCompany, fxCompanyVos); fxCompanyVos.setChildren(formulaClothClassNextTree(list,(sspFxCompany.getId()))); list1.add(fxCompanyVos); } } return list1; } public List formulaClothClassNextTree(List list, Long formulaClothClassId) { List list1 = new ArrayList(); for(AcUserTree sspFxCompany : list){ AcUserVo fxCompanyVos = new AcUserVo(); if(sspFxCompany.getPid().equals(formulaClothClassId.toString())){ BeanUtils.copyProperties(sspFxCompany, fxCompanyVos); fxCompanyVos.setChildren(formulaClothClassNextTree1(list,sspFxCompany.getId())); list1.add(fxCompanyVos); } } return list1; } public List formulaClothClassNextTree1(List list, Long formulaClothClassId) { List list1 = new ArrayList(); for(AcUserTree sspFxCompany : list){ AcUserVo fxCompanyVos = new AcUserVo(); if(sspFxCompany.getPid().equals(formulaClothClassId.toString())){ BeanUtils.copyProperties(sspFxCompany, fxCompanyVos); fxCompanyVos.setChildren(formulaClothClassNextTree1(list,sspFxCompany.getId())); list1.add(fxCompanyVos); } } return list1; } }

实体类:

package com.lifan.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 *
 * @author lifan
 * @since 2021-07-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class AcUserTree implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.ID_WORKER_STR)
    private Long id;

    private String name;

    private String pid;

    //show 是数据库关键字,起个别名
    @TableField("`show`")
    private String show;
}

接受请求类:

package com.lifan.request;

import lombok.Data;


/**
 *
 * @author lifan
 * @since 2021-07-09
 */
@Data
public class AcUserTreeReq {

    private Long id;

    private String name;

    private String pid;

    private String show;

}

响应扩展类:

package com.lifan.vo;

import lombok.Data;

import java.util.List;

/**
 *
 * @author lifan
 * @since 2021-07-09
 */
@Data
public class AcUserVo {

    private Long id;

    private String name;

    private String pid;

    private String show;

    private List children;

}

Mapper 接口:

package com.lifan.mapper;

import com.lifan.entity.AcUserTree;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * 

* Mapper 接口 *

* *
@author lifan * @since 2021-07-09 */ @Mapper public interface AcUserTreeMapper extends BaseMapper { }

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lifan.mapper.AcUserTreeMapper">

mapper>

测试:

数据库:

pid为1 是一级结构,一级结构的id对应二级结构的pid, 下表最多的是5级

SQL :

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 80023
 Source Host           : localhost:3306
 Source Schema         : ac-new

 Target Server Type    : MySQL
 Target Server Version : 80023
 File Encoding         : 65001

 Date: 09/07/2021 18:46:34
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for ac_user_tree
-- ----------------------------
DROP TABLE IF EXISTS `ac_user_tree`;
CREATE TABLE `ac_user_tree`  (
  `id` bigint(0) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `show` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of ac_user_tree
-- ----------------------------
INSERT INTO `ac_user_tree` VALUES (1001, 'li', '1', 'Y');
INSERT INTO `ac_user_tree` VALUES (1002, 'wang', '1', 'Y');
INSERT INTO `ac_user_tree` VALUES (1003, 'zhao', '1', 'Y');
INSERT INTO `ac_user_tree` VALUES (1004, 'li-1', '1001', 'Y');
INSERT INTO `ac_user_tree` VALUES (1005, 'wang-1', '1002', 'Y');
INSERT INTO `ac_user_tree` VALUES (1006, 'wang-2', '1002', 'Y');
INSERT INTO `ac_user_tree` VALUES (1007, 'wang-3', '1002', 'Y');
INSERT INTO `ac_user_tree` VALUES (1008, 'zhao-1', '1003', 'Y');
INSERT INTO `ac_user_tree` VALUES (1009, 'zhao-2', '1003', 'Y');
INSERT INTO `ac_user_tree` VALUES (1010, 'li-1-1', '1004', 'Y');
INSERT INTO `ac_user_tree` VALUES (1011, 'li-1-2', '1004', 'Y');
INSERT INTO `ac_user_tree` VALUES (1012, 'li-1-1-1', '1010', 'Y');
INSERT INTO `ac_user_tree` VALUES (1013, 'li-1-1-2', '1010', 'Y');
INSERT INTO `ac_user_tree` VALUES (1014, 'li-1-1-3', '1010', 'Y');
INSERT INTO `ac_user_tree` VALUES (1015, 'li-1-2-1', '1011', 'Y');
INSERT INTO `ac_user_tree` VALUES (1016, 'li-1-2-2', '1011', 'Y');
INSERT INTO `ac_user_tree` VALUES (1017, 'li-1-2-3', '1011', 'Y');
INSERT INTO `ac_user_tree` VALUES (1018, 'wang-1-1', '1005', 'Y');
INSERT INTO `ac_user_tree` VALUES (1019, 'wang-1-2', '1005', 'Y');
INSERT INTO `ac_user_tree` VALUES (1020, 'wang-1-1-1', '1018', 'Y');
INSERT INTO `ac_user_tree` VALUES (1021, 'li-1-1-1-1', '1012', 'Y');
INSERT INTO `ac_user_tree` VALUES (1022, 'li-1-1-1-2', '1012', 'Y');

SET FOREIGN_KEY_CHECKS = 1;