mybatis查询返回一个三级目录

  • 解决办法
  • Bean的设计
  • mybatis写法
  • 具体实现情况

职场小白,边学边记
做项目遇到一个返回二层嵌套的三级目录的问题,第一次用框架,好多地方不懂,查了许多资料终于解决了这个问题

解决办法

写了三个Bean

  1. 第一个:嵌套二级目录的一级目录
  2. 第二个:嵌套三级目录的二级目录
  3. 第三个:三级目录

ResultMap可以嵌套,这里不做赘述,代码里可以直观看见
(个人认为实际上写两个ResultMap就可以满足,二三层写到一起)

关键点

写SQL时根据关系写出一条查询语句,直接映射为一对多对多的关系 我的是三个层级的目录通过一个parent字段存在一个表里,不同情况不同讨论,但是实现目标是一致的,即形成一对多对多的关系映射(其实就是两个一对多连在了一块)

Bean的设计

最外层整体目录

public class WholeCatalogEntity {//一级目录Idprivate BigInteger title;// 一级目录名称private String key;// 二级目录private List<SecondCatalogEntity> children;
}

中间层目录

public class SecondCatalogEntity {//二级目录Idprivate BigInteger title;//二级目录名称private String key;//三级目录  private List<ThirdCatalogEntity> children;
}

最底层目录

public class ThirdCatalogEntity {//三级目录Idprivate BigInteger title;//三级目录名称private String key;
}

mybatis写法

<select id="getCatalog" resultMap="GetCatalog">select a.id as aid, a.catalog_name as acatalogName, b.id as bid, b.catalog_name as bcatalogName, c.id as cid, c.catalog_name as ccatalogNamefrom catalog as a LEFT join catalog as b on a.id = b.parent LEFT join catalog as c on b.id = c.parentwhere a.catalog_level = 1
</select>
<resultMap id="GetThirdCatalog" type="ThirdCatalogEntity"><id property="title" column="cid"/><result property="key" column="ccatalogName"/>
</resultMap>
<resultMap id="GetSecondCatalog" type="SecondCatalogEntity"><id property="title" column="bid"/><result property="key" column="bcatalogName"/><collection property="children" ofType="ThirdCatalogEntity" resultMap="GetThirdCatalog"/>
</resultMap>
<resultMap id="GetCatalog" type="WholeCatalogEntity"><id column="aid" property="title"/><result property="key" column="acatalogName"/><collection property="children" ofType="SecondCatalogEntity" resultMap="GetSecondCatalog"/>
</resultMap>

可以很直观的从代码里看出嵌套关系

具体实现情况

    "code": "0","message": "查询成功!","result": [{"title": "1","key": "test1","children": [{"title": "11","key": "test11","children": [{"title": "111","key": "ceshi2"},{"title": "112","key": "test112"},{"title": "113","key": "test113"},{"title": "861939","key": "三级目录"}]}]}

总结:一开始我以为要分别查出各级目录,然后在service层里去逐个装配,实施过程中发现非常麻烦而且难以实现,后来查到ResultMap尝试成功。新手缘故,我个人觉得整个代码还能更简洁,希望有大佬能够给出意见。

mybatis查询返回一个三级目录相关推荐

  1. mybatis查询返回null解决方案

    mybatis查询返回null解决方案 参考文章: (1)mybatis查询返回null解决方案 (2)https://www.cnblogs.com/zipon/p/6361661.html 备忘一 ...

  2. mybatis查询返回map的问题

    文章目录 背景 1.mybatis只返回单个map 2.查询返回map的list 3.利用mybatis的@MapKey注解返回map 4.重写handler 背景 假设背景: 想获取某个省下各个市有 ...

  3. Mybatis 查询 返回值中只有id有值,其他都是null;

    最近在重温mybatis, 但是在做练习的时候发现一个问题; 查询,简单的查询,返回之后发现结果中,只有id被映射了值,其他属性都是null; 很纳闷,为什么一个简单的测试会出现这种问题; 一开始以为 ...

  4. mybatis查询返回空,SQL数据库执行有数据!

    我的数据库为Oracle,可以插入,更新,但在在Mybatis中执行SQL查询返回的数据发现返回NULL,但是生成SQL放在数据库中查询是有数据的,并且SQL是正确的! 这是没有改动的XML: < ...

  5. mybatis查询返回null的原因_可怕!你没看错,这次确实是纯手工实现一个MyBatis框架...

    目录 前言 JDBC MyBatis 源码分析 前置知识 原理分析 自己实现一个 MyBatis 框架 前言 MyBatis是一个非常优秀的持久层应用框架,目前几乎已经一统天下.既然是持久层框架,那么 ...

  6. jpa 原生sql 查询返回一个实体_spring data系列之jpa

    Springdata 系列之spring data jpa 背景:随着互联网技术的发展,现在的企业开发中用到的用于数据存储的产品,不再仅仅是关系型数据库,而是要根据场景需要选择不同的存储技术,比如用于 ...

  7. 原生sql 查询返回一个实体_python连接SQLServer执行给定的查询SQL语句,并返回结果数据...

    今天写这篇文章的初衷就是在我昨天发表的文章<Python连接SQLServer数据库执行增删改查操作>后,一些读者反馈说跟Python完全没有关系,这里我想说的是:内容的确是与Python ...

  8. MyBatis查询返回Map类型数据

    1.Mapper中SQL: <select id="getBaseMap" resultType="java.util.HashMap"> sele ...

  9. Mybatis 查询返回List<String>集合

    返回List<String>集合时,需要将resultType的值定义为集合中元素类型,而不是返回集合本身. 有时候,我们不需要整个表的所有字段,而是只需要某一个字段的内容,比如:我希望从 ...

  10. Mybatis 查询返回List集合

    本文链接:https://blog.csdn.net/sotong006/article/details/81697814 返回List<String>集合时,需要将resultType的 ...

最新文章

  1. 20161228阅读笔记
  2. log4j 2.x 架构(源码)
  3. 如何理解拓扑排序算法(转)
  4. 漫画:什么是优先队列
  5. 亚马逊云计算业务上半年营收210亿美元
  6. 【Elasticsearch】Elasticsearch 通信模块的分析
  7. MongoDB配置主从同步(二)
  8. unity Mesh Renderer的一点想法
  9. 全国计算机等级考试一级试题免费,全国计算机等级考试一级试题
  10. 【PR】PR剪辑视频编辑软件视频去字幕
  11. 如何使用网易有道词典翻译英文文档(word格式、pdf格式)
  12. 交换机端口详细配置Trunk
  13. unity3D地形编辑器—Terrain
  14. 处理jmeter tcp 取样器500错误
  15. 【转载文章】批处理经典入门教程!(从不懂到高手)____附加我的学习笔记
  16. android service layoutinflater,[转]Android LayoutInflater详解
  17. 浅谈人工智能(`AI`)基础知识
  18. linux 开机速度 固态,Windows/Linux系统开机OCZ胜出
  19. noi2018 游记 以及 oi生涯回忆录
  20. java list 和数组区别_java list和数组的区别

热门文章

  1. 永磁同步电机矢量控制(六)——MTPA最大转矩电流比控制
  2. 【译】2021年国外十大AI自动写作软件评测
  3. JavaScript日历1
  4. Java 实训1:编写一个窗体程序显示日历表。
  5. 如何将多张图片合并成一个PDF文件
  6. Linux-常用命令
  7. SIPP对接fs压力测试
  8. 手把手带你学微信小程序 —— 如何开发属于自己的第三方微信小程序组件库
  9. AI中台——智能聊天机器人平台的架构与应用
  10. 一个查看目录状态的工具WinDirStat