天天看點

MyBatis 一對多雙向關聯查詢

用一個查詢教師,同時查詢教師名下多名同學的例子來介紹:

一、為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​​        ​​>​​