Mybatis使用association定义关联查询对象规则
1、我们在程序中需要查询员工的时候同时查询出部门信息。
package com.gwolf.bean;
public class Employee implements java.io.Serializable{
private Integer empId;
private String empName;
public Employee() {
}
public Employee(Integer empId, String empName, String email, String gender) {
this.empId = empId;
this.empName = empName;
this.email = email;
this.gender = gender;
}
private String email;
private String gender;
private Department department;
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [empId=" + empId + ", empName=" + empName + ", email="
+ email + ", gender=" + gender + "]";
}
}

2、定义Mapper.xml文件内容,使用联合属性
<association property=""></association>
查询级联内容

3、指定那个属性是联合的对象和属性对象的类型。
<association property="department" javaType="com.gwolf.bean.Department">
</association>

4、定义association关联属性的一些设置
<association property="department" javaType="com.gwolf.bean.Department">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
</association>

5、整体代码如下:
<?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.gwolf.dao.EmployeeMapper">
<!--
namespace:名称空间
id:唯一标识
resultType:返回值类型
#{empId}:从传递过来的参数取出empId值
-->
<resultMap type="com.gwolf.bean.Employee" id="MyDifEmp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
<result column="gender" property="gender"/>
<result column="email" property="email"/>
<result column="emp_name" property="empName"/>
<association property="department" javaType="com.gwolf.bean.Department">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
</association>
</resultMap>
<select id="getEmpById" resultType="employee" databaseId="mysql" resultMap="MyDifEmp">
SELECT e.emp_id, e.emp_name, e.gender, e.email, e.d_id,d.dept_id,d.dept_name
FROM tbl_emp e join tbl_dept d on e.d_id=d.dept_id where e.emp_id = #{empId}
</select>
<select id="getEmpByIdReturnMap" resultType="com.gwolf.bean.Employee">
SELECT e.emp_id, e.emp_name, e.gender, e.email, e.d_id
FROM tbl_emp e where e.emp_id = #{empId}
</select>
<insert id="addEmp" parameterType="employee"
useGeneratedKeys="true" keyProperty="empId" >
insert into tbl_emp(emp_name,email,gender)
value(#{empName},#{email},#{gender})
</insert>
<insert id="addEmp" parameterType="employee" databaseId="oracle">
<selectKey keyProperty="empId" order="BEFORE" resultType="Integer">
select employees_seq.nextval from dual
</selectKey>
insert into tbl_emp(emp_id,emp_name,email,gender)
value(#{empId},#{empName},#{email},#{gender})
</insert>
</mapper>

6、运行单元测试,查看员工的信息是否能够取到。
