接上篇mybatis使用associaton进行分步查询

相关的类还是上篇中的类。

查询部门的时候将部门对应的所有员工信息也查询出来

DepartmentMapper.xml

<!--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则  --><resultMap type="com.mybatis.bean.Department" id="MyDept"><id column="did" property="id"/><result column="dept_name" property="departmentName"/><!-- collection定义关联集合类型的属性的封装规则 ofType:指定集合里面元素的类型--><collection property="emps" ofType="com.mybatis.bean.Employee"><!-- 定义这个集合中元素的封装规则 --><id column="eid" property="id"/><result column="last_name" property="lastName"/><result column="email" property="email"/><result column="gender" property="gender"/></collection></resultMap><!-- public Department getDeptByIdPlus(Integer id); --><select id="getDeptByIdPlus" resultMap="MyDept">SELECT d.id did,d.dept_name dept_name,e.id eid,e.last_name last_name,e.email email,e.gender genderFROM tbl_dept dLEFT JOIN tbl_employee eON d.id=e.d_idWHERE d.id=#{id}</select>

collection分步查询

先通过部门表的id查出部门信息,再通过员工表的部门id查出所有的员工信息,也就是Department中的private List<Employee> emps;的属性信息

DepartmentMapper.xml:首先通过id="getDeptByIdStep"的sql查出部门信息

再通过collection中的select="com.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"调用EmployeeMapper.xml中的查询语句,column="id"为传递的查询条件的值,也就是将这个值赋给EmployeeMapper.xml中的#{deptId}

    <!-- collection:分步查询 --><resultMap type="com.mybatis.bean.Department" id="MyDeptStep"><id column="id" property="id"/><id column="dept_name" property="departmentName"/><collection property="emps" select="com.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"column="id"></collection></resultMap><!-- public Department getDeptByIdStep(Integer id); --><select id="getDeptByIdStep" resultMap="MyDeptStep">select id,dept_name from tbl_dept where id=#{id}</select>

EmployeeMapper.xml

    <!-- public List<Employee> getEmpsByDeptId(Integer deptId); --><select id="getEmpsByDeptId" resultType="com.atguigu.mybatis.bean.Employee">select * from tbl_employee where d_id=#{deptId}</select>

最后呢,也就是将查询到的员工信息,即多条Employee记录封装给Departmentemps属性。

注意:collection的分步查询也是可以延迟加载的,具体配置与上篇中的association一致


另外,collection元素中还有个fetchType类型,也是用来控制延迟加载的,不过比全局配置的优先级更高。

fetchType 可选的。有效值为 lazyeager。 指定属性后,将在映射中忽略全局配置参数 lazyLoadingEnabled,使用属性的值。

补充:collection中的column属性是数据库中的列名,或着是列的别名,用来传递给select属性所指定语句中的参数,那如果需要传递多个参数该怎么写?

官方文档:

转载于:https://www.cnblogs.com/heliusKing/p/11173362.html

mybatis使用collection查询集合属性规则相关推荐

  1. 多对多查询,mybatis使用collection接收集合类型数据

    entity @Data public class TestEntity {private Long id;private String name;private List<Test2Entit ...

  2. 15、mybatis一对多关联查询 collection定义关联集合封装规则及懒加载

    文章目录 1.collection定义关联集合封装规则单步查询 1).Dept增加集合属性 2).DeptMapper增加查询接口 3).DeptMapper.xml增加collection配置 4) ...

  3. mybatis主从表关联查询,返回对象带有集合属性

    昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处理方法也简单说明一下: VersionResult为接收返回数据对象,get\s ...

  4. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)

    MyBatis多表查询 多表模型分类 一对一:在任意一方建立外键,关联对方的主键. 一对多:在多的一方建立外键,关联一的一方的主键. 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键. 数 ...

  5. mybatis联表查询的几种方式,association和collection的用法

    mybatis的association以及collection的用法 前言: 一.association 的三种用法: 第一种用法:association中使用select 第二种方法,嵌套 resu ...

  6. mybatis使用collection嵌套查询

    在开发中,可能会遇到一对多的关系,这个时候,一条sql语句就难以胜任这个任务了.只能先执行一条sql,然后根据返回的结果,再做一次sql关联查询,这个时候,使用mybatis的collection就可 ...

  7. 组件开发之Asp.net服务器控件Collection[集合]属性的设计时支持--编辑、保存

    制作服务器控件的时候,很多时候要用的集合属性(Collection Property),我将自己开发中学到的一些知识点总结一下,可能对初学控件开发的人会有些帮助.     如果你开发过控件,一定知道, ...

  8. java mybatis多层collection嵌套查询

    java mybatis多层collection嵌套查询 1.实体 package com.humi.iem.common.model.equipment;import io.swagger.anno ...

  9. MyBatis嵌套Collection

    站在巨人的肩膀上 https://blog.csdn.net/liaoxiaohua1981/article/details/6862466 聚集元素用来处理"一对多"的关系.需要 ...

  10. mybatis 三级缓存查询循序_MyBatis手把手跟我做系列(五) --- 一级缓存与二级缓存

    一.什么是缓存 要理解MyBatis的一级缓存,至少,你需要先直接什么是缓存的这个概念,其实我们一直都在用 直接来看下面的图: 对于我们之前的JDBC操作,如果需要连续请求id=1的用户数据,那么就需 ...

最新文章

  1. 使用iso文件安装双系统linux,Win7下使用EasyBcd安装Ubuntu(iso文件)双系统
  2. centos7安装mongodb详解
  3. pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换
  4. linux sed删除文件最后一行及shell中单引号、双引号的区别
  5. 389 find the difference
  6. java office文件加水印_文档预览加水印——或可一用的防泄密方式
  7. noise函数的使用
  8. JavaScript之call,bind,apply方法及 this 的用法辨析
  9. Java并发编程-ThreadPool线程池
  10. 工科学生考研能选择计算机专业么,考研应该如何选择学校和专业
  11. 简单的俄罗斯方块代码(Java)
  12. Vue中this.$router.replace和this.$router.push的区别
  13. GoogleNet论文解读
  14. 世界著名管理定律:管人用人育人留人定律
  15. python删除表格重复行_python 删除excel表格重复行,数据预处理操作
  16. 计算机管理中误删用户,win10管理员账户删除了怎么解决?
  17. team viewer如何解绑设备
  18. python 标准正态分布函数_Python中的正态分布统计
  19. 手机App开发的基础概念
  20. 覃小龙34岁生日记:结合趋势,发挥优势,方能百战不殆

热门文章

  1. 拓端tecdat:R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据
  2. linux bash错误,linux bash错误重定向输出
  3. (11)数据结构-栈应用-简易计算器
  4. python lambda函数介绍
  5. astype和squeeze 函数
  6. KMeans聚类算法思想与可视化
  7. 2021-06-20 表单详解
  8. 计算机语言疾病矫治操作流程,言语矫治专家决策系统的构建.doc
  9. Failed to connect to Etherscan API at url https://api-rinkeby.etherscan.io/api
  10. 区块链 Fisco bcos 智能合约(13)-Solidity的设计模式