mybatis 一对多查询 按结果嵌套处理、按查询嵌套处理

最近用到一对多查询,记录一下

实体类

public class RegionEntity implements Serializable {private Long rid;private String regionName;private String addrImage;private String type;private List<FloorEntity> floorEntities;
}
public class FloorEntity implements Serializable {private Long id;private Long rid;private String floorName;
}

一个区域对应多个楼层

xml

按结果嵌套处理

把需要查询的结果,通过sql语句实现

    <select id="getRegionInfo" resultMap="regionMap">select f.id,f.floor_name,r.rid,r.region_name,r.addr_image,r.typefrom region r,floor fwhere f.rid=r.rid and r.rid=#{id}</select><resultMap id="regionMap" type="com.sf.entity.RegionEntity"><result property="rid" column="rid"/><result property="regionName" column="region_name"/><result property="addrImage" column="addr_image"/><result property="type" column="type"/><collection property="floorEntities" ofType="com.sf.entity.FloorEntity"><result property="id" column="id"/><result property="floorName" column="floor_name"/><result property="rid" column="rid"/></collection></resultMap>

按查询嵌套处理

把sql语句分开实现,通过一对多关联起来

    <select id="getRegionInfo2" resultMap="regionMap2">select * from region where rid = #{id}</select><resultMap id="regionMap2" type="com.sf.entity.RegionEntity"><result property="rid" column="rid"/><result property="regionName" column="region_name"/><result property="addrImage" column="addr_image"/><result property="type" column="type"/><collection property="floorEntities" javaType="ArrayList" ofType="com.sf.entity.FloorEntity" select="getFloorByRid" column="rid"/></resultMap><select id="getFloorByRid" resultType="com.sf.entity.FloorEntity">select * from floor where rid = #{id}</select>
<collection property="floorEntities" javaType="ArrayList" ofType="com.sf.entity.FloorEntity" select="getFloorByRid" column="rid"/>

property值为实体类中对象的值,javaType为对应的实体类,select为多方查询语句的命名id,column为两表关联id

dao层

RegionEntity getRegionInfo(Long id);

service、serviceImpl省略

controller层

@RequestMapping("/info/{rid}")
public R info(@PathVariable("rid") Long rid) {RegionEntity region =regionService.getRegionInfo(rid);return region;
}

浏览器测试
http://localhost:8089/info/26

{"rid": 26,"regionName": "401","addrImage": "default.png","deptId": 1,"type": "0","floorEntities": [{"id": 1,"rid": 26,"floorName": "一楼"}, {"id": 2,"rid": 26,"floorName": "二楼"}, {"id": 3,"rid": 26,"floorName": "三楼"}]

按结果嵌套处理、按查询嵌套处理两者的区别

按结果嵌套处理:若多的一方为空,则查询结果为空
按查询嵌套处理:若多的一方为空,依然可以输出查询结果,只是多的一项为null
例如:

{"rid": 27,"regionName": "402","addrImage": "default.png","deptId": 1,"type": "0","floorEntities": []
}

mybatis 一对多查询 按结果嵌套处理、按查询嵌套处理,以及两者之间的区别相关推荐

  1. mybatis一对多关联 创建_MyBatis多对多关联查询(级联查询)

    其实,MyBatis 没有实现多对多级联,这是因为多对多级联可以通过两个一对多级联进行替换. 例如,一个订单可以有多种商品,一种商品可以对应多个订单,订单与商品就是多对多的级联关系,使用一个中间表(订 ...

  2. mybatis 一对多_MyBatis面试题集合,90%会遇到这些问题

    1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...

  3. MyBatis 一对多嵌套查询

    MyBatis 一对多结果集嵌套查询 嵌套查询的实现原理为两次查询,比如产品表为主表,图片表为从表通过product_id字段与产品表id字段关联实现一对多,嵌套查询 首先查询 主表的数据 然后将主表 ...

  4. mybatis一对多查询返回

    mybatis一对多查询返回 定义实体类 Mapper.xml文件 Mapper.java文件 定义实体类 InventoryVO 和InventoryDetailVO是一对多的关系. @Data p ...

  5. Mybatis一对多查询的两种姿势,你值得拥有(收藏就完事了)

    文章目录 数据库表准备 实例演示 方法一:联合查询ResultMap映射 方法二:子查询映射 总结 前言 最近碰到了Mybatis一对多查询的场景,在这里总结对比下常见的两种实现方式. 本文以常见的订 ...

  6. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  7. mybatis一对多查询Pagehelper分页条数不对

    问题:在写mybatis一对多的时候用到了Pagehelper进行分页,然后发现确实能分页,但是展示的条数不对,后来研究了发现原来Pagehelper插件在一对多查询的时候默认的是对多的一方进行的分页 ...

  8. PageHelper关于Mybatis一对多查询返回Total错误

    PageHelper关于Mybatis一对多查询返回Total错误 遇到的问题: pagehelper进行一对多查询时,返回的总数量对不上,例如需求是一个页面展示10个spu信息,实际上只展示了6个s ...

  9. MyBatis学习总结(5)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

最新文章

  1. 在网页中加入百度搜索条
  2. 在Spark上用Scala实验梯度下降算法
  3. java servlet 跳转_Servlet跳转方式sendReDirect()和forward()
  4. java 修改 jar 包文件内容的一个实例
  5. 在linux上处理base64加密和解密
  6. ffmpeg软硬件解码基础(总目录)
  7. arpspoof渗透工具使用方法详解+实战
  8. 高中信息技术——Access数据库刷题点整理
  9. linux内核C -- 第05课:零长度数组
  10. ActivityMQ入门案例
  11. matlab加载fuzzy模块,FuzzyDEMATEL的matlab实现
  12. linux源码编译ipk,Ubuntu亲自手动编译Openwrt (DreamBox): for njit....ipk
  13. EXCEL抓取SQL查询数据
  14. android自动夜间模式吗,Android夜间模式的实现方案
  15. 美团外卖token解密(Java版)
  16. 如何解决“Component ‘MSCOMCTLOCX‘ or one of its dependencies .....“
  17. OptiView® XG 网络分析平板电脑特性(上)
  18. 基于rt-thread系统的探索者开发板综合测试实验(一)
  19. jsPlumb+vue创建字段映射关系
  20. 1319. 移棋子游戏(sg+图论(移棋子)邻接表)

热门文章

  1. Java中nextfloat怎么用,关于java的nextFloat()后面跟一个nextLine()
  2. 项响琴C语言书籍在线浏览,电子琴 c语言程序
  3. Synchronized 的 8 种使用场景!
  4. 程序员专属精品简历合集—面试必备
  5. C# USB设备的管理(Devcon和注册表的USB操作)
  6. Oracle 游标的练习
  7. JENKINS使用DOCKER运行PYTEST并且出ALLURE报告
  8. php 文件 后缀,php如何修改文件后缀名
  9. ASP.NET MVC 上传图片到项目目录中的文件夹并显示
  10. android跑分和ios,手机:苹果VS安卓 跑分不代表手机流畅度