用一个查询教师,同时查询教师名下多名同学的例子来介绍:
一、为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 >
四、通过spring注解的方式
<!-- mapper自动扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<property name="basePackage" value="com.abc.mapper" />
<property name="annotationClass" value="org.springframework.stereotype.Repository" />
</bean>