java按照指定格式数据封装

标签: java  数据库  mysql  mybatis  

一、需求

1、数据库表
在这里插入图片描述
2、按照如下格式进行数据分装:

 {
      {
        "id": "1178214681181483010",
        "title": "一级分类",
        "children": [
          {
            "id": "1178214681210843137",
            "title": "二级分类"
          }
        ]
      },
}

二、解决方式

1、创建数据库表实体类

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="EduSubject对象", description="课程科目")
public class EduSubject implements Serializable {

    private static final long serialVersionUID=1L;

    @ApiModelProperty(value = "课程类别ID")
      @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    @ApiModelProperty(value = "类别名称")
    private String title;

    @ApiModelProperty(value = "父ID")
    private String parentId;

    @ApiModelProperty(value = "排序字段")
    private Integer sort;

    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;

    @ApiModelProperty(value = "更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;

}

2、根据返回数据创建一级分类实体类

/**
 * 一级分类
 * @Author jzd
 * @Date 2020/8/2 15:07
 */
@Data
public class OneSubject {
    private String id;
    private String title;

    //一个一级分类有多个二级分类
    private List<TwoSubject> children = new ArrayList<>();
}

3、根据返回数据创建二级分类实体类

/**
 * 二级分类
 * @Author jzd
 * @Date 2020/8/2 15:07
 */
@Data
public class TwoSubject {
    private String id;
    private String title;
}

3、编写具体封装

//课程分类列表
@Override
public List<OneSubject> getOneTwoSubject() {
    //查询出所有一级分类 parentId = 0
    QueryWrapper<EduSubject> wrapperOne = new QueryWrapper<>();
    wrapperOne.eq("parent_id","0");
    List<EduSubject> oneSubjectList  = baseMapper.selectList(wrapperOne);

    //查询出所有二级分类 parentId != 0
    QueryWrapper<EduSubject> wrapperTwo = new QueryWrapper<>();
    wrapperOne.ne("parent_id","0");
    List<EduSubject> twoSubjectList  = baseMapper.selectList(wrapperTwo);

    //封装一级分类
    List<OneSubject> finalSubjectList = new ArrayList<>();
    for (int i = 0; i <oneSubjectList.size() ; i++) {
        EduSubject eduSubject = oneSubjectList.get(i);
        OneSubject oneSubject = new OneSubject();
        BeanUtils.copyProperties(eduSubject,oneSubject);
        finalSubjectList.add(oneSubject);
        //封装二级分类
        List<TwoSubject> twoFinalSubjectList = new ArrayList<>();
        for (int j = 0; j < twoSubjectList.size(); j++) {
            EduSubject eduSubject2 = twoSubjectList.get(j);
            if (eduSubject2.getParentId().equals(eduSubject.getId())) {
                TwoSubject twoSubject = new TwoSubject();
                BeanUtils.copyProperties(eduSubject2,twoSubject);
                twoFinalSubjectList.add(twoSubject);
            }
        }
        oneSubject.setChildren(twoFinalSubjectList);
    }
    return finalSubjectList;
}

三、总结

在这里插入图片描述

版权声明:本文为W211953332原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/W211953332/article/details/107746373

智能推荐

手机端图片放大,双指放大,元素的双指缩放

在做webapp时候,遇到一个需要做双指放大的功能,需求是:一张带有坐标的图片上有固定的点,需要点击这些坐标上的点进入相应的商品,并且需要对这一块进行双指可以缩放,双击缩放; 一开始是自己写监听touch事件进行处理,但是再缩放的时候,偶尔出现卡顿闪烁,用户体验不很好,后来采用插件 pinch-zoom GitHub地址: https://github.com/manuelstofer/...

leetcode 剑指offer 54 二叉搜索树的第k大节点

第 K 大节点即反中序遍历大第 K 个数。...

redis 初步了解

1.连接redis 通过java操作 1.首先 导入redis驱动 2.连接redis通过jedis 2.创建redis连接池 连接redis通过 jedis 相当于HTTPclient 1.创建单例模式的方法 在调用的时候被创建 2.创建私有静态 jedisPool 3. 创建私有类 创建静态代码块 放入连接池的基本配置 4.有 最大连接数 最大空闲书 最小空闲连接数 5. 创建连接redis对...

第6章数据类型-基本数据类型-Boolean类型-main

防采集标记:亢少军老师的课程和资料 Dart交流群:1046954554 Flutter开源项目请关注: https://github.com/kangshaojun @作者: 亢少军 '...

使用 Infura 和 web3.js 呼叫合约

如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 如果你希望了解如何部署合约,可以查看另一篇文章:在truffle中使用infura部署以太坊智能合约。 Infura 提供公开的 Ethereum 主网和测试网络节点。到 Infura 官网申请,只要输入一点基本资料和 Email,就可以收到 API-ke...

猜你喜欢

手写RPC通信框架

RPC基本介绍 服务器端构建 API包下主体编写 首先初始采用Socket进行通信利用IO进行数据交互,对客户端要提供API调用接口,使得客户端可以利用API中提供的接口,获得服务器端的数据。服务器端模块目录如下: 先编写一个接口,该接口放置在api模块下,实现类放置在provider模块下,这样做目的是让客户端仅加载API包的条件下,可以调用服务器端的实现类完成具体业务逻辑。 服务器端需要客户端...

Highcharts饼状图Ajax动态赋值的问题

这种饼状图是动态的当鼠标放上面那一部分会突出的 Highcharts下载:点击下载 Highcharts-zh_CN.js下载:点击下载 效果图: 前台js代码: 控制层代码: 其中用到两种传值方式一种JSON另一种用Map传值给Ajax,下面为取到的值。 两个饼状图并列展示前台代码: 给饼状图赋值主要就是取json拼接成 data:[[name,y],[name,y]]这样的数组 注意y后面的数...

Qt工程Windows下的安装包制作

工具 Depends.exe nisedit2.0.3.exe nsis-2.50-setup.exe 先安装nsis-2.50-setup.exe, 在安装nisedit2.0.3.exe. 都按默认安装即可. Depends.exe不需要安装. 步骤 1, 在工程中的main()函数里添加如下代码解决库路径问题. 2, 在工程文件.pro中添加如下内容, 其中”DESTDIR=in...

LNMP架构(8)GoAccess可视化动态日志分析平台的部署

一.简介 1.goaccess主要用于分析apache和nginx日志,功能十分强大。 二。安装 三。用goaccess分析nginx的日志  网页分析日志...

JAVAWEB学习总结,DAY10(JavaScript高级)

学习目标 能够使用正则表达式进行表单的验证 能够使用DOM中来查找节点 能够使用DOM来增删改节点 能够使用数组中常用的方法 能够使用日期对象常用的方法 案例一使用JS完成表单的校验plus 一,案例需求 用户名输入框,电子邮箱, 手机号码 , 获得焦点的时候给用户提示, 失去焦点进行 校验 用户名:只能由英文字母和数字组成,长度为4~16个字符,并且以英文字母开头 手机号:以1开头, 第二为是3...