废话不多说直接上代码
Employee.java
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
private Department dept;
}
接口文件EmployeeMapperPlus.java
public interface EmployeeMapperPlus {
/**
* 根据id查询Employee对象,使用resultMap
* @param id
* @return
*/
public Employee getEmpById(Integer id);
/**
* 根据id查询Employee对象,同时要查询出Deptment对象信息 方式一
* @param id
* @return
*/
public Employee getEmpAndDeptById(Integer id);
/**
* 根据id查询Employee对象,同时要查询出Deptment对象信息 方式二
* @param id
* @return
*/
public Employee getEmpAndDeptById2(Integer id);
}
Mapper配置文件EmployeeMapperPlus.xml
<?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.du.mybatis.dao.EmployeeMapperPlus">
<!--
type:自定义规则的java类型
id:唯一标识,以便引用
-->
<resultMap type="com.du.mybatis.bean.Employee" id="MySimpleEmp">
<!--
主键列使用id,其他列使用result
property java属性字段名
column 数据库字段名
-->
<id property="id" column="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<!-- public Employee getEmpById(Integer id); -->
<select id="getEmpById" resultMap="MySimpleEmp">
select id, last_name, email, gender from tbl_employee where id= #{id}
</select>
<!-- 一对一关系写法1 级联属性封装结果集-->
<resultMap type="com.du.mybatis.bean.Employee" id="MyDifEmp1">
<id column="id" property="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<result property="dept.id" column="dept_id"/>
<result property="dept.departmentName" column="dept_name"/>
</resultMap>
<!-- 一对一关系写法2 使用association -->
<resultMap type="com.du.mybatis.bean.Employee" id="MyDifEmp2">
<id column="id" property="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<!--
association指定级联的Javabean对象
property指定该对象的字段名称
javaType指定对象类型(必填)
-->
<association property="dept" javaType="com.du.mybatis.bean.Department">
<id column="id" property="id"/>
<result column="dept_name" property="departmentName"/>
</association>
</resultMap>
<!--
查询Employee同时查出所属部门Department
resultMap:可以选择MyDifEmp1和MyDifEmp2其中一种实现方式
-->
<!-- public Employee getEmpAndDeptById(Integer id); -->
<select id="getEmpAndDeptById" resultMap="MyDifEmp1">
<!-- 注意查询字段如果不写*,则要把所有需要的字段列出 -->
SELECT e.id,e.last_name,e.email,e.gender,e.dept_id,d.dept_name FROM tbl_employee e, tbl_dept d
WHERE e.dept_id=d.id and e.id=#{id}
</select>
<!-- 一对一关系,实现方式三 -->
<resultMap type="com.du.mybatis.bean.Employee" id="MyDifEmp3">
<id column="id" property="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<!--
定义关联对象
column:将该字段作为参数传递给select作为入参
-->
<association property="dept" column="dept_id" select="com.du.mybatis.dao.DepartmentMapper.getDeptById"></association>
</resultMap>
<!-- 一对一关系,实现方式四 -->
<resultMap type="com.du.mybatis.bean.Employee" id="MyDifEmp4">
<id column="id" property="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<!--
定义关联对象
column:将该字段作为参数传递给select作为入参
-->
<association property="dept" column="dept_id" select="queryDeptById"></association>
</resultMap>
<!--
分步骤查询:
1、根据员工号查询员工信息
2、根据员工信息的dept_id信息,在部门表里查询部门信息
3、将部门信息放入到员工属性的Department里
-->
<!-- public Employee getEmpAndDeptById2(Integer id); -->
<select id="getEmpAndDeptById2" resultMap="MyDifEmp4">
select id, last_name, email, gender, dept_id from tbl_employee where id=#{id}
</select>
<select id="queryDeptById" resultType="com.du.mybatis.bean.Department">
select id,dept_name departmentName from tbl_dept where id=#{id}
</select>
<!-- ================================ -->
<!--
resultMap中有一个discriminator标签,鉴别器:可以使用discriminator判断某列的值,然后根据某列的值改变封装行为
<discriminator javaType=""></discriminator>
例如:Employee
如果查出是女生,查出部门信息,
如果是男生,不查询部门信息,同时把last_Name这一列赋值给email;
参见MyDifEmp5配置
-->
<resultMap type="com.du.mybatis.bean.Employee" id="MyDifEmp5">
<id column="id" property="id"/>
<result property="lastName" column="last_name"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<!--
column:需要判断的列
javaType:列值对应的java类型
-->
<discriminator javaType="string" column="gender">
<!-- 女生 resultType:指定封装的结果类型 -->
<case value="0" resultType="com.du.mybatis.bean.Employee">
<association property="dept" column="dept_id" select="com.du.mybatis.dao.DepartmentMapper.getDeptById"></association>
</case>
<!-- 男生 resultType:指定封装的结果类型 -->
<case value="1" resultType="com.du.mybatis.bean.Employee">
<!-- 等于说,重新配置规则 -->
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="last_name" property="email"/>
<result column="gender" property="gender"/>
</case>
</discriminator>
</resultMap>
</mapper>