天天看點

mybatis學習(5):關聯查詢的幾種方式

文章末尾附上Employee.java  和 Department.java

方式一:聯合查詢:級聯屬性封裝結果集

    <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDifEmp">

        <id column="id" property="id"/>

        <result column="last_name" property="lastName"/>

        <result column="gender" property="gender"/>

        <result column="did" property="dept.id"/>

        <result column="dept_name" property="dept.departmentName"/>

    </resultMap>

<!--  接口:public Employee getEmpAndDept(Integer id);-->

    <select id="getEmpAndDept" resultMap="MyDifEmp">

        SELECT e.id id,e.last_name last_name,e.gender gender,e.d_id d_id,

        d.id did,d.dept_name dept_name FROM tbl_employee e,tbl_dept d

        WHERE e.d_id=d.id AND e.id=#{id}

    </select>

方式二:使用association定義關聯的單個對象的封裝規則;

    <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDifEmp2">

        <id column="id" property="id"/>

        <result column="last_name" property="lastName"/>

        <result column="gender" property="gender"/>

        <!--  association可以指定聯合的javaBean對象

        property="dept":指定哪個屬性是聯合的對象

        javaType:指定這個屬性對象的類型[不能省略]

        -->

        <association property="dept" javaType="com.atguigu.mybatis.bean.Department">

            <id column="did" property="id"/>

            <result column="dept_name" property="departmentName"/>

        </association>

    </resultMap>

<!--  public Employee getEmpAndDept(Integer id);-->

    <select id="getEmpAndDept" resultMap="MyDifEmp2">

        SELECT e.id id,e.last_name last_name,e.gender gender,e.d_id d_id,

        d.id did,d.dept_name dept_name FROM tbl_employee e,tbl_dept d

        WHERE e.d_id=d.id AND e.id=#{id}

    </select>

方式三:使用association進行分步查詢:

        1、先按照員工id查詢員工資訊

        2、根據查詢員工資訊中的d_id值去部門表查出部門資訊

        3、部門設定到員工中;

     <!--  id  last_name  email   gender    d_id   -->

     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyEmpByStep">

         <id column="id" property="id"/>

         <result column="last_name" property="lastName"/>

         <result column="email" property="email"/>

         <result column="gender" property="gender"/>

         <!-- association定義關聯對象的封裝規則

             select:表明目前屬性是調用select指定的方法查出的結果

             column:指定将哪一列的值傳給這個方法

             流程:使用select指定的方法(傳入column指定的這列參數的值)查出對象,并封裝給property指定的屬性

          -->

         <association property="dept" 

             select="com.atguigu.mybatis.dao.DepartmentMapper.getDeptById"

             column="d_id">

         </association>

     </resultMap>

     <!--  public Employee getEmpByIdStep(Integer id);-->

     <select id="getEmpByIdStep" resultMap="MyEmpByStep">

         select * from tbl_employee where id=#{id}

     </select>

可以使用懶加載方式

mybatis學習(5):關聯查詢的幾種方式

Employee.java  和 Department.java

package com.atguigu.mybatis.bean;

import org.apache.ibatis.type.Alias;

@Alias("emp")
public class Employee {
	
	private Integer id;
	private String lastName;
	private String email;
	private String gender;
	private Department dept;
	
	public Employee() {
		super();
	}
	
	public Employee(Integer id, String lastName, String email, String gender) {
		super();
		this.id = id;
		this.lastName = lastName;
		this.email = email;
		this.gender = gender;
	}
	
	
	

	public Department getDept() {
		return dept;
	}

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

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	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 [id=" + id + ", lastName=" + lastName + ", email="
				+ email + ", gender=" + gender + "]";
	}
	
	

}
           
package com.atguigu.mybatis.bean;

import java.util.List;

public class Department {
	
	private Integer id;
	private String departmentName;
	private List<Employee> emps;
	
	
	
	public List<Employee> getEmps() {
		return emps;
	}
	public void setEmps(List<Employee> emps) {
		this.emps = emps;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDepartmentName() {
		return departmentName;
	}
	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}
	@Override
	public String toString() {
		return "Department [id=" + id + ", departmentName=" + departmentName
				+ "]";
	}
	
	

}
           

繼續閱讀