知识点:查询一个实体类,并查出这个类下面的集合

Employee.java实体类

package com.hand.mybatis.bean;
public class Employee {
    private Integer eId;
    private String eName;
    private Integer gender;
    private String email;
    private Department dept;
   
    public Employee() {
        super();
    }  
    public Employee(Integer eId,String eName, Integer gender, String email) {
        super();
        this.eId=eId;
        this.eName = eName;
        this.gender = gender;
        this.email = email;
    }

public Integer geteId() {
        return eId;
    }
    public void seteId(Integer eId) {
        this.eId = eId;
    }
   
    public String getEName() {
        return eName;
    }
    public void setEname(String ename) {
        this.eName = ename;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    } 
    public Department getDept() {
        return dept;
    }
    public void setDept(Department dept) {
        this.dept = dept;
    }
    @Override
    public String toString() {
        return "Employee [eId=" + eId + ", ename=" + eName + ", gender=" + gender + ", email=" + email + "]";
    }

}

Department.java实体类

package com.hand.mybatis.bean;
import java.util.List;

public class Department {
    private Integer id;
    private String departName;
    private List<Employee> empList;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getDepartName() {
        return departName;
    }
    public void setDepartName(String departName) {
        this.departName = departName;
    }
    
    public List<Employee> getEmpList() {
        return empList;
    }
    public void setEmpList(List<Employee> empList) {
        this.empList = empList;
    }
     
    @Override
    public String toString() {
        return "Department [id=" + id + ", departName=" + departName + "]";
    }
   
}

DepartmentMapper.java接口

package com.hand.mybatis.dao;
import com.hand.mybatis.bean.Department;

public interface DepartmentMapper {

Department getDeptById(Integer did);
    
    //根据部门id,查询部门信息,同时将部门下的所有员工信息查询出来
     Department getDeptByIdPlus(Integer did);
    
     //分步查询部门信息
     Department getDeptByIdStep(Integer did);
}

DepartmentMapper.xm l映射文件

<?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">
<mapper namespace="com.hand.mybatis.dao.DepartmentMapper">

<!-- Department getDeptById(Integer did); -->
   <select id="getDeptById"  resultType="com.hand.mybatis.bean.Department">
       SELECT did id,deptname departName FROM dept WHERE did=#{did}
   </select>
   
    <!--1.查询部门的时候将部门对应的所有员工信息也查询出来
    -->
   
    <resultMap type="com.hand.mybatis.bean.Department" id="departmentMap">
        <result property="id" column="did"/>
        <result property="departName" column="deptname"/>
        <!--collection定义关联集合类型的属性的封装规则
            ofType:指定集合里面元素的类型  -->
        <collection property="empList" ofType="com.hand.mybatis.bean.Employee">
         <!-- 定义这个集合元素的封装规则 -->
          <id column="eid" property="eId"/>
          <result column="ename" property="eName"/>
          <result column="email" property="email"/>
          <result column="gender" property="gender"/>
        </collection>
    </resultMap>
      
    <!-- Department getDeptByIdStep(Integer did); -->   接口一:根据部门did查询部门信息,员工信息   
    <select id="getDeptByIdPlus" resultMap="departmentMap">
        SELECT d.did,d.deptname,e.eid,e.ename,e.email,e.gender
        FROM dept d
        LEFT JOIN emp e
        ON d.did=e.did
        WHERE d.did=#{did}
    </select>
    
    
    <!--2. select_resultMap关联查询collection分步查询 -->
    
    <resultMap type="com.hand.mybatis.bean.Department" id="departmentMapPlus">
      <id column="did" property="id"/>
      <result column="deptname" property="departName"/>
      <collection property="empList"
          select="com.hand.mybatis.dao.EmployeeMapper.getEmpByDeptId"
          column="{dId=did}" fetchType="lazy">//可以多列传值
      </collection>
    </resultMap>

<!--Department getDeptByIdStep(Integer did); -->接口二:根据部门id分步查询员工信息
   <select id="getDeptByIdStep" resultMap="departmentMapPlus">
      SELECT did,deptname
      from dept
      WHERE did=#{did}
   </select>
 
  <!--  扩展,多列的值传递过去,将多列的值封装map传递
       column="{key1=column1,key2=column2}"
       fetchType="lazy":表示使用延迟加载
       - lazy:延迟
       - eager:立即-->
 
</mapper>

代码:https://github.com/shuaishuaihand/mybatis.git

mybatis映射文件select_resultMap_关联查询_collection定义关联集合的更多相关文章

  1. Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载

    笔记要点出错分析与总结工程组织 1.定义接口 interface DepartmentMapper package com.dao; import com.bean.Department; publi ...

  2. MyBatis映射文件的resultMap如何做表关联

    MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对Java对象和SQL的映射.这里简单介绍一下映射 ...

  3. SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis

    一:DAO实体编码 1:首先,在src目录下,新建org.myseckill.entity包,用于存放实体类: 2:实体类设计 根据前面创建的数据库表以及映射关系,创建实体类. 表一:秒杀商品表 对应 ...

  4. MyBatis 映射文件详解

    1. MyBatis 映射文件之<select>标签 <select>用来定义查询操作; "id": 唯一标识符,需要和接口中的方法名一致; paramet ...

  5. MyBatis映射文件 相关操作

    一.MyBatis映射文件 1.简介 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行 ...

  6. MyBatis 映射文件

    Mybatis映射文件简介 1) MyBatis 的真正强大在于它的映射语句.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉 ...

  7. Mybatis映射文件标签(关于sql)

    Mybatis映射文件 1.接口的全限定名和映射文件的namespace一致 <mapper namespace="com.offcn.dao.UserDao"> 2. ...

  8. Mybatis映射文件完整模板参照

    Mybatis映射文件完整模板参照 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...

  9. Mybatis映射文件中#取值时指定参数相关规则

    Mybatis映射文件中#取值时指定参数相关规则 在#{}中,除了需要的数值外,还可以规定参数的一些其他规则. 例如:javaType,jdbcType,mode(存储过程),numericScale ...

随机推荐

  1. JS实现关闭当前子窗口,刷新父窗口及调用父窗口的方法

    一.js实现关闭当前子窗口,刷新父窗口 JS代码如下: <script> function refreshParent() {  window.opener.location.href = ...

  2. 2017 Multi-University Training Contest - Team 3——HDU6063 RXD and math

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6063 题目意思:字面意思,给出n,k,算出这个式子的答案. 思路:比赛的时候是打表找规律过了,赛后仔细 ...

  3. /proc/iomem和/proc/ioports对应的fops

    /proc/iomem和/proc/ioports对应的fops static int __init ioresources_init(void) {     struct proc_dir_entr ...

  4. ES6中的let和const

    let和const let 用来声明变量,但是所声明的变量只在let命令所在的代码块内有效 { let a=12 alert(a)//12 } alert(a)//报错 找不到 let不像var那样会 ...

  5. Spring AOP和事务的相关陷阱

    1.前言 2.嵌套方法拦截失效 2.1 问题场景 2.2 解决方案 2.3 原因分析 2.3.1 原理 2.3.2 源代码分析 3.Spring事务在多线程环境下失效 3.1 问题场景 3.2 解决方 ...

  6. Python3中json的encode和decode

    在Python3中,将对象序列化为JSON对象,即对对象进行json encode编码,使用函数 json.dumps(obj, *, skipkeys=False, ensure_ascii=Tru ...

  7. OKEx量化分析报告[2017-12-19]

    [分析时间]2017-12-19 09:05 [分析对象]OKEx [有效期限]2017-12-19 09:00:00 — 2017-12-19 09:59:59 [报告内容]DASH_USDT   ...

  8. C++的全部目标就是最优化资源的利用,以人付出更多为代价。Python刚好是另一个极端(Bjarne就说,一个人至少应该掌握两种计算机语言)

    说 C++ 反人类,是如果把 C++ 看作人(程序员)和资源(电子系统)的桥梁,他的全部目标就是最优化资源的利用,以人付出更多为代价.Python刚好是另一个极端.做好两个一起学.Bjarne就说,一 ...

  9. 使用LoadRunner的Web(HTTP/HTML)协议录制手机app脚本

    一.打开HP Virtual User Generator,创建虚拟用户脚本,选择Web(HTTP/HTML)协议:

  10. java.math.BigDecimal

    package day14; import java.math.BigDecimal; /** * Created by admin on 2018/11/24. * 看程序写结果:结果和我们想的有一 ...