mybatis使用collection查询集合属性规则
相关的类还是上篇中的类。
查询部门的时候将部门对应的所有员工信息也查询出来
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 gender
		FROM tbl_dept d
		LEFT JOIN tbl_employee e
		ON d.id=e.d_id
		WHERE 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记录封装给Department的emps属性。
注意:collection的分步查询也是可以延迟加载的,具体配置与上篇中的association一致
另外,collection元素中还有个fetchType类型,也是用来控制延迟加载的,不过比全局配置的优先级更高。
fetchType可选的。有效值为 lazy和eager。 指定属性后,将在映射中忽略全局配置参数lazyLoadingEnabled,使用属性的值。
补充:collection中的column属性是数据库中的列名,或着是列的别名,用来传递给select属性所指定语句中的参数,那如果需要传递多个参数该怎么写?
官方文档:

mybatis使用collection查询集合属性规则的更多相关文章
- 使用collection查询集合属性
		
介绍resultMap中使用collection查询集合属性 业务需求,查询部门中的多个人员 public class Department { private Integer id; private ...
 - mybatis的collection查询问题以及使用原生解决方案的结果
		
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
 - mybatis 一对多查询 集合创建空对象的问题
		
在做 mybatis 一对多查询的时候, resultMap 里面用到了集合标签 collection ,后来发现 当该条数据没有子集的时候, collection 会自动创建一个属性都是null的对 ...
 - Mybatis Collection查询集合只出现一条数据
		
1.原因 如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条. 2.解决办法 级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的.但在mybat ...
 - MyBatis使用Collection查询多对多或一对多结果集bug
		
情况描述:当使用JOIN查询,如果SQL查询出来的记录不是按id列排序的,则生成的List结果会有问题 案例: 1) 数据库模型 简而言之一个Goods包含多个Goods_Img 2) Java Be ...
 - 在mybatis中,在列表分页查询过程中造成集合属性数据丢失的问题
		
由于在进行多表关联分页查询时,某一个集合属性的多条数据正好位于2页的分割处,那么就会造成在前一页获取到的该集合属性的集合内部数据不全,因为其余数据被分到了第二页, 因此建议在进行集合属性的封装时,最好 ...
 - Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载
		
笔记要点出错分析与总结工程组织 1.定义接口 interface DepartmentMapper package com.dao; import com.bean.Department; publi ...
 - Java-MyBatis-杂项:MyBatis根据数组、集合查询
		
ylbtech-Java-MyBatis-杂项:MyBatis根据数组.集合查询 1.返回顶部 1. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的 ...
 - MyBatis基础入门《四》接口方式.Select查询集合
		
MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...
 
随机推荐
- [反汇编]函数开始部分利用mov ebx,esp找到返回地址(_KTRAP_FRAME结构)
			
我们理解call原理,首先将返回地址压入栈中,之后执行调用. 因此,在一个函数开始部分,esp依旧是上一个栈帧的esp,此时esp指向返回地址. 这就意味着使用 mov ebx,esp,之后 [ebx ...
 - 初始HTML_表格
			
Html表格 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
 - curl ftp libcurl 功能使用
			
struct FtpFile { const char *filename; FILE *stream; }; static size_t my_fwrite(void *buffer, size_t ...
 - 第三方库Mantle的源码解析
			
Mantle是一个用于简化Cocoa或Cocoa Touch程序中model层的第三方库.通常我们的应该中都会定义大量的model来表示各种数据结构,而这些model的初始化和编码解码都需要写大量的代 ...
 - App iCON 尺寸
			
120*120 180*180 58*58 87*87 80*80 120*120
 - 通过Thrift实现C#与Hbase交流
			
近期着手的一个项目需要将我方数据存储到Hadoop的大数据环境,由于本人是.net平台的开发者,没有怎么接触过大数据(因为他实在是太高大尚了).但还好baidu, google后,还是很找到了解决办法 ...
 - Linux 登录 MySQL 报错, 解决bash: mysql: command not found 的方法
			
原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件. 首先得知道mysql ...
 - itest(爱测试) 4.1.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
			
v4.1.1下载地址 :itest下载 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试 ...
 - Windows10下Git环境变量配置
			
一.确定Git正确安装并能使用 右键项目目录,检查Git版本: 输入: git --version 二. 配置环境变量 右键我的电脑 --> 属性 点击高级系统设置 --> 环境变量 - ...
 - RAID几种方式
			
RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失 ...