1.拷贝mybatis06的com.my包,resource下的配置文件
2.删除StudentMapper.xml以及TeacherMapper.xml的sql
3.删除测试类里的测试方法
4.修改Student以及Teacher实体属性
@Data
public class Student {
private int id;
private String name;
private int tid;
}
@Data
public class Teacher {
private int id;
private String name;
// 一个老师对应多个学生
private List<Student> students;
}
5.查询老师
5.1 TeacherMapper编写接口方法
// 获取老师
List<Teacher> getTeacher();
5.2 TeacherMapper.xml编写sql查询语句
<select id="getTeacher" resultType="Teacher">
select * from teacher
</select>
5.3 test测试类编写测试方法
@Test
public void getTeacher(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
List<Teacher> teachers = mapper.getTeacher();
for (Teacher teacher:teachers) {
System.out.println(teacher);
}
sqlSession.close();
}
5.4 测试结果
students为空如何解决?????
方法一:结果嵌套查询
方法二:子查询
6.查询指定老师下的所有学生(结果嵌套查询)
6.1 TeacherMapper编写接口方法
// 获取指定老师下的所有学生
Teacher getTeacherById(@Param("tid") int id);
6.2 TeacherMapper.xml编写sql语句
<!-- 按照结果嵌套查询-->
<select id="getTeacherById" resultMap="TeacherStudent">
select s.id sid,s.name sname,t.name tname,t.id tid
from student s,teacher t
where s.tid=t.id and t.id=#{tid}
</select>
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
6.3 测试类编写测试方法
@Test
public void getTeacherById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacherById(1);
System.out.println(teacher);
sqlSession.close();
}
6.4 测试结果
7.查询指定老师下的所有学生(子查询)
7.1.注释方法一的sql语句
7.2.编写子查询sql语句
<!--方法二: 子查询 -->
<select id="getTeacherById" resultMap="TeacherStudent">
select * from teacher where id=#{tid}
</select>
<resultMap id="TeacherStudent" type="Teacher">
<collection property="students"
javaType="ArrayList"
ofType="Student"
select="getStudentByTeacherId"
column="id"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
select * from student where tid=#{tid}
</select>