zoukankan      html  css  js  c++  java
  • 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;
    
    /**
     * <p>
     *  前端控制器
     * </p>
     *
     * @author lifan
     * @since 2021-07-09
     */
    @RestController
    public class AcUserTreeController {
    
        @Autowired
        private AcUserTreeService acUserTreeService;
    
        @PostMapping("/treeQuery")
        public List<AcUserVo> SspFxProQuery() {
            List<AcUserVo> fxCompanyVos = acUserTreeService.formulaClothClassGetTree();
    
            return fxCompanyVos;
        }
    
    }

    service:

    package com.lifan.service;
    
    import com.lifan.vo.AcUserVo;
    import java.util.List;
    
    /**
     * <p>
     *  服务类
     * </p>
     *
     * @author lifan
     * @since 2021-07-09
     */
    public interface AcUserTreeService {
    
        List<AcUserVo> 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;
    
    /**
     * <p>
     *  服务实现类
     * </p>
     *
     * @author lifan
     * @since 2021-07-09
     */
    @Service
    public class AcUserTreeServiceImpl implements AcUserTreeService {
    
        @Autowired
        private AcUserTreeMapper acUserTreeMapper;
    
        public List<AcUserVo> formulaClothClassGetTree() {
            QueryWrapper queryWrapper = new QueryWrapper();
            //只查询 启用状态的
    //        queryWrapper.eq("`show`",'Y');
            List<AcUserTree> list = acUserTreeMapper.selectList(queryWrapper);
            List<AcUserVo> 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<AcUserVo> formulaClothClassNextTree(List<AcUserTree> list, Long formulaClothClassId) {
            List<AcUserVo> 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<AcUserVo> formulaClothClassNextTree1(List<AcUserTree> list, Long formulaClothClassId) {
            List<AcUserVo> 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<AcUserVo> children;
    
    }

    Mapper 接口:

    package com.lifan.mapper;
    
    import com.lifan.entity.AcUserTree;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.apache.ibatis.annotations.Mapper;
    
    /**
     * <p>
     *  Mapper 接口
     * </p>
     *
     * @author lifan
     * @since 2021-07-09
     */
    @Mapper
    public interface AcUserTreeMapper extends BaseMapper<AcUserTree> {
    
    }

    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;
  • 相关阅读:
    HBase Cassandra比较
    重新认识HBase,Cassandra列存储——本质是还是行存储,只是可以动态改变列(每行对应的数据字段)数量而已,当心不是parquet
    HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已!
    Cassandra 数据模型设计,根据你的查询来制定设计——反范式设计本质:空间换时间
    【LeetCode】【Python解决问题的方法】Best Time to Buy and Sell Stock II
    LVM逻辑卷管理命令
    Java引进和应用的包装类
    Android 4.0新组件:GridLayout详细说明
    【剑指offer】打印单列表从尾部到头部
    原因以及如何避免产生僵尸进程
  • 原文地址:https://www.cnblogs.com/lifan12589/p/14992065.html
Copyright © 2011-2022 走看看