在返回json数据时常常需要返回树形的结构,自己去写递归来构建树的话又太麻烦了。
下面介绍一种使用mybatis来返回树形结构的好方法

表结构展示

表里面需要记录父级Id

MyBatis一对多collection用法

第一次用过org_id找到符合的数据,返回给orgTreeMap,关键就在这个resultMap里面,有一个集合,集合又去调用了getOrgByParentId方法,该方法把查询的到的org_id,当作parent_id来查找,getOrgByParentId又返回要给orgTreeMap这样就形成了递归查询。

    <resultMap id="orgTreeMap" type="com.ylz.api.vo.OrgVO"><result column="org_id" jdbcType="VARCHAR" property="orgId"/><result column="org_name" jdbcType="VARCHAR" property="orgName"/><result column="parent_id" jdbcType="VARCHAR" property="parentId"/><collection column="org_id" property="children"  ofType="com.ylz.api.vo.OrgVO"  select="getOrgByParentId" ></collection></resultMap><select id="getOrgTree" parameterType="java.lang.String" resultMap="orgTreeMap">select o.org_id, o.org_name, o.parent_idfrom org_table@allcenter_db owhere o.org_id = #{orgId}</select><select id="getOrgByParentId" parameterType="java.lang.String" resultMap="orgTreeMap">select o.org_id, o.org_name, o.parent_idfrom org_table@allcenter_db owhere o.parent_id = #{orgId}</select>

返回类

@JsonIgnoreProperties(ignoreUnknown = true)
public class OrgVO {private String orgId;private String orgName;private String parentId;//父机构idprivate List<OrgVO> children;}

调用

    public String orgTree(OverviewPojo overviewPojo) {OrgVO orgVO = userMapper.selectOrgInfoByUserId(overviewPojo.getUserId());List<OrgVO> orgTree = orgMapper.getOrgTree(orgVO.getOrgId());return ReturnJsonFormatUntil.json(true, AnalysisJson.parseListWithGson(orgTree));}

返回树形结构的json数据

JDK8返回树形结构

public class 树型关系 {public static void main(String[] args) {//初始化数据NodeTree NodeTree1 = new NodeTree("xx1",1,-1);NodeTree NodeTree2 = new NodeTree("xx2",2,-1);NodeTree NodeTree3 = new NodeTree("xx3",3,-1);NodeTree NodeTree4 = new NodeTree("xx4",4,1);NodeTree NodeTree5 = new NodeTree("xx5",5,2);NodeTree NodeTree6 = new NodeTree("xx6",6,3);NodeTree NodeTree7 = new NodeTree("xx7",7,4);NodeTree NodeTree8 = new NodeTree("xx8",8,7);NodeTree NodeTree9 = new NodeTree("xx9",9,5);List<NodeTree> list = new ArrayList<>();list.add(NodeTree1);list.add(NodeTree2);list.add(NodeTree3);list.add(NodeTree4);list.add(NodeTree5);list.add(NodeTree6);list.add(NodeTree7);list.add(NodeTree8);list.add(NodeTree9);List<NodeTree> collect = list.stream()//找到所有最顶级的节点.filter(e -> e.pid.equals(-1))//查找顶级节点的所有子节点.map(e -> covert(e, list)).collect(Collectors.toList());System.out.println(collect);}/*** 返回当前节点的以及所有子节点* @param nodeTree 当前节点* @param nodeTreeList 所有节点* @return*/public static NodeTree covert(NodeTree nodeTree, List<NodeTree> nodeTreeList) {List<NodeTree> children = nodeTreeList.stream()//过滤出当前节点的下一级子节点.filter(subNodeTree -> subNodeTree.getPid().equals(nodeTree.getId()))//递归查找.map(subNodeTree -> covert(subNodeTree, nodeTreeList)).collect(Collectors.toList());nodeTree.setChildren(children);return nodeTree;}
}
@Data
@NoArgsConstructor
class NodeTree {//名称String name;//idInteger id;//父idInteger pid;//子节点List<NodeTree> children;public NodeTree(String name, Integer id, Integer pid) {this.name = name;this.id = id;this.pid = pid;}
}

Mybatis返回树形结构相关推荐

  1. java读取文件目录返回树形结构

    为实现读取文件目录下的文件信息,生成树形结构,以方便前端做一些展示 1.结构实体类 package cn.cnic.instdb.model.system;import lombok.Data; im ...

  2. Java返回树形结构的数据 (children方式)

    以children这种方式的实体类来遍历子父级的树形结构. //问题分类下拉表 @Override public List<DA> selectDA(Long deptId,Long us ...

  3. mybatis mysql 树形结构_Mybatis查询树形结构数据

    数据表的设计 创建数据表 对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的. 一张树形结构的数据表基本的三个字段:id(自己).name(名称)和parentid(父类编 ...

  4. springmvc+mybatis 无极限树形结构菜单

    MYSQL数据库 查出数据调用封装类 List<Menu> menulist = new ArrayList<Menu>();menulist = menuService.me ...

  5. java如何返回树形结构

    一.需求说明 在做项目的时候前台要显示一个树形目录,比如下面这样: 二.添加数据库表 1.创建数据库表 2.添加测试数据 三.后端代码实现 PS:该测试类中的create_time和update_ti ...

  6. mybatis 父子级树形结构查询

    针对父子级数据目录查询, 以前都是逐级的去根据父级id查询子集目录, 查出后最后再在代码中拼成树形结构, 相当复杂,我们可以利用 mybatis 提供的 collection 标签自动组织树形结构, ...

  7. Java实现返回的数据为树形结构

    1.实体类为: id:主键 name:名字 parent_id:父id grade:等级 根据list中的实体类数据返回树形结构,代码如下: public class TSystemTreeUtil ...

  8. mybatis mysql查询树形结构_MyBatis collection 集合嵌套查询树形节点

    原标题:MyBatis collection 集合嵌套查询树形节点 MyBatis collection 集合 MyBatis 是数据持久层框架,支持定制化 SQL.存储过程以及高级映射.尤其强大在于 ...

  9. 使用js将后台返回的数据转换成树形结构

    将类似如下数据转换成树形的数据: [{ id: 1, name: '1', },{ id: 2, name: '1-1', parentId: 1 },{ id: 3, name: '1-1-1', ...

最新文章

  1. 3.实战HTML+CSS布局(实例入门篇)
  2. [Google Guava] 使用和避免null
  3. 【Spring学习】spring开发包介绍
  4. 老弟做了个网盘,炸了!
  5. python numba 转灰度图_Python数据预处理:Dask和Numba并行化加速!
  6. 写python脚本管理_《写给系统管理员的 Python 脚本编程指南》笔记——第八章 文档和报告...
  7. 在.net中创建外接程序
  8. oracle 执行sql路径,如何指定 SQL 执行路径
  9. .net环境下如何使用MySql数据库
  10. 韩国被申遗 (转自果壳)
  11. AD7606数据采集模块使用方法
  12. 智能睡眠监测带扣案列/APP/小程序/网站
  13. Lync/Skype脱机地址簿不更新
  14. vue 自定义事件 传入额外参数
  15. centos 6.3_x64编译7.4 LFS
  16. **2021,靠谱的网赚项目,遇上靠谱的你,谁说赚钱不轻松**
  17. Android使用GoogleMap实现定位与路径检索功能
  18. 设计模式 - 装饰器模式
  19. SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
  20. java酒吧系统源代码_bar 小型酒吧在线管理系统,后台用户名和密码都是admin Jsp/Servlet 238万源代码下载- www.pudn.com...

热门文章

  1. 【计算机毕业设计】基于微信小程序的高校学生选课系统
  2. 推荐一些提高学习工作效率的电脑工具软件(一)
  3. 5GNR漫谈7:PUCCH信道设计
  4. 国家自然科学基金结题报告下载
  5. JSP中播放提示声音
  6. 纵横网络靶场社区 MMS协议分析
  7. 2019自考00018计算机应用基础,2018年4月自考00018计算机应用基础试题及答案
  8. RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 3 and 2 ...
  9. 八位竞赛抢答器基于Multisim
  10. OS内核(xv6)探究-系统调用