Mybatis通过collection联合查询

package com.atgui.spring.mybatis.entities;

import java.util.List;

public class Department {
	private Integer id;
	private String name;
	private List<Employee> emps;
	@Override
	public String toString() {
		return "Department [id=" + id + ", name=" + name + ", emps=" + emps + "]";
	}
	public List<Employee> getEmps() {
		return emps;
	}
	public void setEmps(List<Employee> emps) {
		this.emps = emps;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
package com.atgui.spring.mybatis.entities;

public class Employee {
	private Integer id;
	private String lastName;
	private String email;
	private double salary;
	private Integer deptId;
	private Department dept;
	
	public Department getDept() {
		return dept;
	}
	public void setDept(Department dept) {
		this.dept = dept;
	}
	public Employee() {
		super();
	}
	public Employee(Integer id, String lastName, String email, double salary, Integer deptId) {
		super();
		this.id = id;
		this.lastName = lastName;
		this.email = email;
		this.salary = salary;
		this.deptId = deptId;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public Integer getDeptId() {
		return deptId;
	}
	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}
	@Override
	public String toString() {
		return "Employee2 [id=" + id + ", lastName=" + lastName + ", email=" + email + ", salary=" + salary
				+ ", deptId=" + deptId + ", dept=" + dept + "]";
	}
	
	
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:要实现的接口的全类名 -->
<mapper namespace="com.atguigu.mybatis.mapper.DepartmentMapper">

	  <select id="getDepartmentById" resultType="com.atguigu.mybatis.entities.Department">
	  	select id,name deptName from departments where id = #{deptId}
	  </select>
	  
	  <!-- 需求二:在将部门查出来的同时将部门下所有的员工也查询出来 -->
	  <select id="getDepartmentContainsEmps" resultMap="customMap">
	  	SELECT d.id d_id,d.name d_name,e.*
		FROM departments d
		LEFT JOIN employees e
		ON d.id = e.dept_id
		WHERE d.id = #{id};
	  </select>
	  
	  <!-- 自定义结果集 -->
	  <resultMap type="com.atguigu.mybatis.entities.Department" id="customMap">
	  	<!-- 映射主键 -->
	  	<id column="d_id" property="id"/>
	  	<!-- 映射其他列 -->
	  	<result column="d_name" property="deptName"/>
	  	<!-- 通过collection进行联合查询 
	  		property:指定要映射的属性的属性名
	  		ofType:指定集合中泛型的类型
	  	-->
	  	<collection property="emps" ofType="com.atguigu.mybatis.entities.Employee">
	  		<!-- 映射主键 -->
	  		<id column="id" property="id"/>
	  		<!-- 映射其他列 -->
	  		<result column="last_name" property="lastName"/>
	  		<result column="email" property="email"/>
	  		<result column="salary" property="salary"/>
	  	</collection>
	  </resultMap>
	  
	  <!-- 通过collection进行分步查询
	  		1.根据部门的id查询出Department对象
	  		2.根据Department的id查询出来部门下所有的员工
	  		3.将员工设置到Department对象中
	   -->
	  <select id="getDepartmentContainsEmpsByStep" resultMap="customMap2">
	  	select id,name deptName from departments where id = #{id}
	  </select>
	  
	  <!-- 自定义结果集 -->
	  <resultMap type="com.atguigu.mybatis.entities.Department" id="customMap2">
	  	<!-- 映射主键 -->
	  	<id column="id" property="id"/>
	  	<!-- 映射其他列 -->
	  	<result column="deptName" property="deptName"/>
	  	<!-- 通过connection进行分步查询 -->
	  	<collection property="emps" select="com.atguigu.mybatis.mapper.EmployeeMapper.getEmployeesByDeptId"
	  	 column="id"></collection>
	  </resultMap>
</mapper>
//联合查询部门和部门下所有员工
		@Test
		public void getDepartmentAndAllEmployeeById() throws IOException {
		//1.创建SQLSessionFactory对象
			SqlSessionFactory sqlSessionFactory = getSessionFactory();
			//回去sqlsession ,相当于jdbc中的connection
			SqlSession session = sqlSessionFactory.openSession();
			try {
				DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
				 Department departmentAndAllEmployeeById = mapper.getDepartmentAndAllEmployeeById(3);
				System.out.println(departmentAndAllEmployeeById); 	
				session.commit();
			} finally {
				session.close();
			}
		}

 

分步查询

<select id="getEmployeeById" resultType="com.atgui.spring.mybatis.entities.Employee">
      select * from employees where id=#{id}
  </select>

<select id="getDepartmentAndAllEmployeeByStep" resultMap="customMap2">
        select * from departments where id=#{id}
    </select>
    <resultMap type="com.atgui.spring.mybatis.entities.Department"
        id="customMap2">
        <id column="d_id" property="id"></id>
        <result column="d_name" property="name" />
        <collection property="emps"
            select="com.atgui.spring.mybatis.mapper.EmployeeMapper.getEmployeeById"
            column="id">
        </collection>
    </resultMap>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值