springboot是spring的一个开源子框架 以自动装配原理和各种简化 可以以最快最便捷的开发分布式微服务项目
MyBatis-Plus
(简称 MP)是一个
MyBatis
的增强工具,提供多种插件和条件构造器,为简化开发、提高效率而生。
stream()是Java新特性提供的一种流式编程 其中提供多种方法可以让你以一种声明的方式处理数据。
做之前先来看看递归思想
例如:5! = 5*4*3*2*1 = 120 公式: n!=n(n-1)! 函数:f(n) = n*f(n-1) n>0
public static int factorial(int num) {
if (num == 0) {
return 1;
} else {
return num * factorial(num - 1);
}
}
通俗来讲就是自己吊自己
以上是做这个业务基本要知道的
上代码!!!
实体层
package com.clemente.multilevelclassification.entity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tb_pub_area_info")//对应数据库表名 进行映射
public class TbPubAreaInfoEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("ID")//对应数据库id字段
private String id;
@TableField("AREA_NAME")//对应数据库其他字段
private String areaName;
@TableField("PARENT_AREAID")
private String parentAreaid;
@TableField("AREA_LEVEL")
private BigDecimal areaLevel;
@TableField("LONGITUDE")
private BigDecimal longitude;
@TableField("LATITUDE")
private BigDecimal latitude;
@TableField("IS_USE")
private BigDecimal isUse;
@TableField("ORDER_NO")
private BigDecimal orderNo;
@TableField("RECORD")
private String record;
@TableField(fill = FieldFill.INSERT)
@JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//基于Jackson的时间格式化
private LocalDateTime recordDate;//可以利用mp做自动填充
@TableField("MODIFIER")
private String modifier;//可以利用mp做自动填充
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime modifyDate;
@TableField(exist = false)//不存在数据库中
@JsonInclude(JsonInclude.Include.NON_EMPTY)//当没有子类的时候去掉null 或者[]
private List<TbPubAreaInfoEntity> Children;//子类元素的存储位置
}
mapper层
package com.clemente.multilevelclassification.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clemente.multilevelclassification.entity.TbPubAreaInfoEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* Created with IntelliJ IDEA.
*
* @Author: clement
* @Date: 2022年08月07日 21:09
* @Description:
*/
@Mapper
public interface TbPubAreaInfoMapper extends BaseMapper<TbPubAreaInfoEntity> {
}
service层
接口
package com.clemente.multilevelclassification.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.clemente.multilevelclassification.entity.TbPubAreaInfoEntity;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: clement
* @Date: 2022年08月07日 21:09
* @Description:
*/
public interface TbPubAreaInfoService extends IService<TbPubAreaInfoEntity> {
List<TbPubAreaInfoEntity> ListWithTree();
}
实现类
package com.clemente.multilevelclassification.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.clemente.multilevelclassification.entity.TbPubAreaInfoEntity;
import com.clemente.multilevelclassification.mapper.TbPubAreaInfoMapper;
import com.clemente.multilevelclassification.service.TbPubAreaInfoService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created with IntelliJ IDEA.
*
* @Author: clement
* @Date: 2022年08月07日 21:11
* @Description:
*/
@Service("TbPubAreaInfoService")
public class TbPubAreaInfoServiceImpl extends ServiceImpl<TbPubAreaInfoMapper, TbPubAreaInfoEntity> implements TbPubAreaInfoService{
@Override
public List<TbPubAreaInfoEntity> ListWithTree() {
//查询所有数据
List<TbPubAreaInfoEntity> infoEntities = this.baseMapper.selectList(new QueryWrapper<TbPubAreaInfoEntity>(null));
//查出一级分类
List<TbPubAreaInfoEntity> entityList = infoEntities.stream().filter(item -> {//过滤并返回一级分类
return item.getParentAreaid() == null;
//映射 把item里面的每一个元素都应用于里面的映射规则并返回
}).map(item->{ //所有数据
item.setChildren(getChildrens(item,infoEntities));
return item;
//收集 返回的数据以流的形式收集成了集合
}).collect(Collectors.toList());
return entityList;
}
//递归方法 方法自己吊自己
private List<TbPubAreaInfoEntity> getChildrens(TbPubAreaInfoEntity root, List<TbPubAreaInfoEntity> all) {
List<TbPubAreaInfoEntity> collect = all.stream().filter(item -> {
//过滤并返回出含有子集的数据
return root.getId().equals(item.getParentAreaid());
}).map(item -> {
item.setChildren(getChildrens(item, all));
return item;
}).collect(Collectors.toList());
return collect;
}
}
控制层
package com.clemente.multilevelclassification.controller;
import com.clemente.multilevelclassification.entity.TbPubAreaInfoEntity;
import com.clemente.multilevelclassification.service.TbPubAreaInfoService;
import com.clemente.multilevelclassification.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.annotation.Resources;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: clement
* @Date: 2022年08月07日 21:05
* @Description:
*/
@SuppressWarnings("all")//抑制警告线
@RequestMapping("tbpubareainfo")//请求映射父路径
@RestController//复合注解 @Controller + @ResponseBody
public class TbPubAreaInfoController {
//@Qualifier根据名字注入 配合@Autowired在多个相同bean类型下使用
//@Resource更具类型和名称注入 先根据bean类型在找bean名子
@Autowired//根据bean类型注入
TbPubAreaInfoService tbPubAreaInfoService;
@GetMapping("/index")//请求子路径
public R findAll(){
List<TbPubAreaInfoEntity> data = tbPubAreaInfoService.ListWithTree();
return R.ok().put("data",data);
}
}
启动类
package com.clemente.multilevelclassification;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.clemente.multilevelclassification.mapper")//dao层
@SpringBootApplication
public class MultiLevelClassiFicationApplication {
public static void main(String[] args) {
SpringApplication.run(MultiLevelClassiFicationApplication.class, args);
}
}
访问:
http://localhost:8080/tbpubareainfo/index
效果如图:
是不是感觉屌爆了 我也觉得!!!
版权声明:本文为HaoGeCSDN2002原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。