一:以下主要演示三点

sql配置文件和接口的绑定关系,如果不清楚,请参考另一篇文章
接口和sql配制文件绑定关系 本章重点在Sql配置文件中【以及JAVA实体类设计部门,请重点查看配置文件中resultMap设置,和JAVA实体类设计的包含关系】

  1. 字段名对应关系
  2. 一对一关系
  3. 一对多关系

二:字段名对应关系

2.1:接口方法 【接口和sql配制文件绑定关系】

路径:com.wangYuan.mappers.DeptMapper03

public interface DeptMapper03 {
    // 1:参数实体类字段名和数据库字段名称不同
    List<Dept02> queryAll();
}

2.2:Sql配置文件

<?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">
<!--
    1:参数实体类字段名和数据库字段名称不同
-->
<mapper namespace="com.wangYuan.mappers.DeptMapper03">
    <!--数据库表字段和java实体类【Dept02】对应关系:-->
    <resultMap id="deptMap" type="Dept02">
        <!--id : 定义主键字段与属性的映射关系-->
        <id column="deptno" property="id"/>
        <result column="dname" property="name" />
        <!--字段一致的内容可以省略不写-->
        <!--<result column="loc" property="loc" />-->
    </resultMap>
    
     <!--resultMap,表示数据库表字段和java实体类对应关系-->
    <select id="queryAll" resultMap="deptMap">
        select * from dept
    </select>
</mapper>

2.3:实体类内容

public class Dept02 {
    private int id;//实体类字段和数据库的字段不匹配,在上面配置文件中设置对应关系
    private String name;
    private String loc;
	//...省略get ,set等方法
}

2.4:java代码测试

public class test03 {
   public static void main(String[] args) throws IOException {
       //获取sqlSession
       SqlSession sqlSession = sessionUtils.getSqlSession();
       //调用getMapper,获取接口对象
       DeptMapper03 sqlMapper = sqlSession.getMapper(DeptMapper03.class);
       List<Dept02> dept02s = sqlMapper.queryAll();//对应字段名
       dept02s.forEach(System.out::println);
       sqlSession.close();
	}
}

三:一对一关系

2.1:接口方法 【接口和sql配制文件绑定关系】

路径:com.wangYuan.mappers.DeptMapper03

public interface DeptMapper03 {
    //查询每一个员工信息以及员工所在的部门信息  [一对一]
    List<Emp02> queryEmpDept();
}

2.2:Sql配置文件

<?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">
<!--
    1:参数实体类字段名和数据库字段名称不同
-->
<mapper namespace="com.wangYuan.mappers.DeptMapper03">
    <!--"~~~~~~~~~~~~~~~~~~~~~~~一对一【一个对象中包一个其他实体类】~~~~~~~~~~~~~~~~~~~~~~~~~~~~"-->
    <!--自定义结果集中的字段与javabean类中属性的映射关系-->
    <!--在多表查询结果的时候,每一个字段对应关系都不能省略-->
    <resultMap id="EmpDept" type="Emp02">
        <!--主键字段与属性的映射关系-->
        <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>
        <result column="deptno" property="deptno"></result>
        <!--association : 定义javabean类型属性与字段的映射关系-->
        <association property="pddDept" javaType="Dept02">
            <id property="id" column="deptno" />
            <result property="name" column="dname" />
            <result property="loc" column="loc" />
        </association>
    </resultMap>

	<!--查询的Sql-->
    <select id="queryEmpDept" resultMap="EmpDept">
        select empno,ename,job,mgr,hiredate,sal,comm,emp.deptno,dname,loc from emp join dept on emp.deptno = dept.deptno
    </select>
</mapper>

2.3:实体类内容

public class Dept02 {
    private int id;//实体类字段和数据库的字段不匹配,在上面配置文件中设置对应关系
    private String name;
    private String loc;
	//...省略get ,set等方法
}
public class Emp02 {
    private int empno;
    private String ename;
    private double sal;
    private String job;
    private double comm;
    private int mgr;
    private Date hiredate;
    private int deptno;

    //属性: javabean : 员工对象所在的部门信息
    private Dept02 pddDept;
	//...省略get ,set等方法
}
### 2.4:java代码测试
```java
public class test03 {
   public static void main(String[] args) throws IOException {
       //获取sqlSession
       SqlSession sqlSession = sessionUtils.getSqlSession();
       //调用getMapper,获取接口对象
       DeptMapper03 sqlMapper = sqlSession.getMapper(DeptMapper03.class);
        List<Emp02> emps=sqlMapper.queryEmpDept();//一对一
       emps.forEach(System.out::println);
       sqlSession.close();
	}
}

三:一对多关系

2.1:接口方法 【接口和sql配制文件绑定关系】

路径:com.wangYuan.mappers.DeptMapper03

public interface DeptMapper03 {
    //查询所有部门信息以及每个部门所在的员工   【一对多】
    List<Dept03> queryAllDept();
}

2.2:Sql配置文件

<?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">
<!--
    1:参数实体类字段名和数据库字段名称不同
-->
<mapper namespace="com.wangYuan.mappers.DeptMapper03">
    <!--"~~~~~~~~~~~~~~~~~~~~~~~一对多【一个对象中包多个其他实体类】~~~~~~~~~~~~~~~~~~~~~~~~~~~~"-->
    <resultMap id="deptMap03" type="Dept03">
        <!--id : 定义主键字段与属性的映射关系-->
        <id column="deptno" property="id"/>
        <!--id : 定义非主键字段与属性的映射关系-->
        <result column="dname" property="name" />
        <result column="loc" property="loc" />
        <!--属性为List集合,使用collection标签定义 ofType:集合中数据的类型-->
        <collection property="empList" javaType="List"  ofType="Emp03">
            <id property="empno" column="empno" />
            <result property="ename" column="ename" />
            <result property="job" column="job" />
            <result property="mgr" column="mgr" />
            <result property="hiredate" column="hiredate" />
            <result property="sal" column="sal" />
            <result property="comm" column="comm" />
            <result property="deptno" column="deptno" />
        </collection>
    </resultMap>

    <select id="queryAllDept" resultMap="deptMap03">
        select dept.deptno,dname,loc,empno,ename,job,mgr,hiredate,sal,comm from dept left join emp on emp.deptno = dept.deptno
    </select>
</mapper>

2.3:实体类内容

public class Dept03 {
    private int id;
    private String name;
    private String loc;
    //属性 : List<Emp03>
    private List<Emp03> empList;
	//...省略get ,set等方法
}
public class Emp03 {
    private int empno;
    private String ename;
    private double sal;
    private String job;
    private double comm;
    private int mgr;
    private Date hiredate;
    private int deptno;
	//...省略get ,set等方法
}
### 2.4:java代码测试
```java
public class test03 {
   public static void main(String[] args) throws IOException {
       //获取sqlSession
       SqlSession sqlSession = sessionUtils.getSqlSession();
       //调用getMapper,获取接口对象
       DeptMapper03 sqlMapper = sqlSession.getMapper(DeptMapper03.class);
        List<Dept03> dept03s = sqlMapper.queryAllDept();//一对多
        dept03s.forEach(System.out::println);
       sqlSession.close();
	}
}