mybatis使用collection查询集合属性规则

接上篇mybatis使用associaton进行分步查询
相关的类还是上篇中的类。

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

DepartmentMapper.xml


	<resultMap type="com.mybatis.bean.Department" id="MyDept">
		<id column="did" property="id"/>
		<result column="dept_name" property="departmentName"/>
		
		<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>
	
	<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 emps;的属性信息

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

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

	
	<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>
	
	<select id="getDeptByIdStep" resultMap="MyDeptStep">
		select id,dept_name from tbl_dept where id=#{id}
	select>

EmployeeMapper.xml

	
	<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属性所指定语句中的参数,那如果需要传递多个参数该怎么写?

官方文档:
在这里插入图片描述

你可能感兴趣的:(笔记,xml,java,开发语言,mybatis)