用一個查詢教師,同時查詢教師名下多名同學的例子來介紹:
一、為Teacher實體增加相關屬性
為教師實體增加指導學生集合的屬性如下:
private List<Student> supStudents; //指導學生
并為其增加setter和getter方法,這裡略過。
二、TeacherMapper接口
為實作教師實體映射,應先建立映射器接口如下:
package com.abc.mapper;
import com.abc.domain.Teacher;
public interface TeacherMapper {
public Teacher getById( int id);
}
三、映射檔案
為教師實體建立的映射檔案如下:
<? xml version = "1.0" encoding = "utf8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--與以前一樣,namespace的值是對應的映射器接口的完整名稱-->
< mapper namespace = "com.abc.mapper.TeacherMapper" >
<!--TeacherMapper接口中getById方法對應的SQL語句。
查詢教師及其指導的學生的資訊。由于教師、學生都有
id、name、gender等屬性,是以給教師的字段都起了别名-->
< select id = "getById" parameterType = "int" resultMap = "supervisorResultMap" >
select t.id t_id, t.name t_name, t.gender t_gender,
t.research_area t_research_area, t.title t_title,
s.id,s.name, s.gender,s.major,s.grade
from teacher t,student s where t.id=#{id}
and s.supervisor_id = t.id
</ select >
<!--教師實體映射-->
< resultMap id = "supervisorResultMap" type = "Teacher" >
< id property = "id" column = "t_id" />
< result property = "name" column = "t_name" />
< result property = "gender" column = "t_gender" />
< result property = "researchArea" column = "t_research_area" />
< result property = "title" column = "t_title" />
<!--collection元素映射教師的指導學生集合的屬性。resultMap
以命名空間名.resultMap的id的形式,引用studentResultMap。
需要注意的是,上面的select語句中學生的字段名/别名應與
studentResultMap中的column屬性一緻-->
< collection property = "supStudents"
resultMap = "com.abc.mapper.StudentMapper.studentResultMap" />
</ resultMap >
</ mapper >
相應地,學生實體的映射檔案如下:
<? xml version = "1.0" encoding = "utf8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
< mapper namespace = "com.abc.mapper.StudentMapper" >
< resultMap id = "studentResultMap" type = "Student" >
< id property = "id" column = "id" />
< result property = "name" column = "name" />
< result property = "gender" column = "gender" />
< result property = "major" column = "major" />
< result property = "grade" column = "grade" />
<!--相應地,在此引用supervisorResultMap,亦采用
命名空間名.resultMap的id的形式。-->
< association property = "supervisor"
resultMap = "com.abc.mapper.TeacherMapper.supervisorResultMap" />
</ resultMap >
</ mapper >