先根據 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;