Mybatis 04 一对一,一对多,多对多关联映射

发布时间 2023-09-20 11:22:07作者: OYそ

一对一 一个员工对应一个部门

实体类 emp
package com.entity;

import java.io.Serializable;
import java.math.BigDecimal;

public class EmpVo implements Serializable {
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private String hiredate;
    private BigDecimal sal;
    private BigDecimal comm;

    private Dept dept;//一个员工对应一个部门

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {    this.dept = dept;    }

    public Integer getEmpno() {        return empno;    }

    public void setEmpno(Integer empno) {   this.empno = empno;    }

    public String getEname() {        return ename;    }

    public void setEname(String ename) {        this.ename = ename;    }

    public String getJob() {        return job;    }

    public void setJob(String job) {        this.job = job;    }

    public Integer getMgr() {        return mgr;    }

    public void setMgr(Integer mgr) {        this.mgr = mgr;    }

    public String getHiredate() {        return hiredate;    }

    public void setHiredate(String hiredate) {this.hiredate =hiredate; }

    public BigDecimal getSal() {        return sal;    }

    public void setSal(BigDecimal sal) {        this.sal = sal;    }

    public BigDecimal getComm() {        return comm;    }

    public void setComm(BigDecimal comm) {        this.comm = comm;    }


    @Override
    public String toString() {
        return "EmpVo{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr=" + mgr +
                ", hiredate='" + hiredate + '\'' +
                ", sal=" + sal +
                ", comm=" + comm +
                '}';
    }
}

接口 EmpMapper
public interface EmpMapper {
    //多表查询
    List<EmpVo> selectEmpDeptMapping();
}
配置 EmpMapper.xml
 <resultMap id="empDeptMapping" type="empVo">
        <id column="empno" property="empno"></id>
        <result column="ename" property="ename"></result>
        <result column="job" property="job"></result>
        <result column="mgr" property="mgr"></result>
        <result column="hiredate" property="hiredate"></result>
        <result column="sal" property="sal"></result>
        <result column="comm" property="comm"></result>
        <association property="dept" javaType="dept">
            <id column="deptno" property="deptno"></id>
            <result column="dname" property="dname"></result>
            <result column="loc" property="loc"></result>
        </association>
    </resultMap>
    <select id="selectEmpDeptMapping" resultMap="empDeptMapping">
        select e.*,d.* from emp e,dept d where e.deptno=d.deptno
    </select>
test
    @Test
    public void selectEmpDeptMapping() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
        List<EmpVo> empList = empMapper.selectEmpDeptMapping();
        for (EmpVo empVo : empList) {
            System.out.println(empVo+"---"+empVo.getDept());
        }

        sqlSession.close();
    }

image

一对多 一个部门多个员工

实体类 Dept
package com.entity;

import java.util.List;

public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;
    List<EmpVo> empVos; //一个部门多个员工

    public List<EmpVo> getEmpVos() {
        return empVos;
    }

    public void setEmpVos(List<EmpVo> empVos) {
        this.empVos = empVos;
    }

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

    public Dept(Integer deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }
}

接口类
public interface EmpMapper {
      List<Dept> selectDeptEmpMapping(); //查询各个部门的员工信息
}
映射
   <!--一对多 一个部门多个员工-->
    <resultMap id="deptEmpMapping"  type="dept">
        <id column="deptno" property="deptno"></id>
        <result column="dname" property="dname"></result>
        <result column="loc" property="loc"></result>
        <collection property="empVos" ofType="empVo">
            <id column="empno" property="empno"></id>
            <result column="ename" property="ename"></result>
            <result column="job" property="job"></result>
            <result column="mgr" property="mgr"></result>
            <result column="hiredate" property="hiredate"></result>
            <result column="sal" property="sal"></result>
            <result column="comm" property="comm"></result>
        </collection>
    </resultMap>
    <select id="selectDeptEmpMapping" resultMap="deptEmpMapping" >
        select e.*,d.* from emp e,dept d where e.deptno=d.deptno
    </select>
test
  /*配置 一对多关联映射 一个部门对应多个员工*/
    @Test
    public void selectDeptEmpMapping() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
        List<Dept> deptList = empMapper.selectDeptEmpMapping();
        for (Dept dept : deptList) {
            System.out.println(dept+"---"+dept.getEmpVos());
        }
        sqlSession.close();
    }

image