一个老师拥有多个学生 一对多 使用association
多个学生拥有一个老师 多对一 使用collection
Student和Teacher表
多对一
两个实体类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;//一个老师有多个学生
}
TeacherMapper.java
public interface TeacherMapper {
//获取指定老师以及拥有的所有学生
Teacher getTeacher(@Param("tid") int id);
}
TeacherMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sun.dao.TeacherMapper">
<resultMap id="StudentTeacher" 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>
<select id="getTeacher" resultMap="StudentTeacher">
select t.id tid,t.name tname,s.id sid,s.name sname
from teacher t,student s
where t.id=s.tid and t.id=#{tid}
</select>
</mapper>
测试类MyTest.java
public class MyTest {
@Test
public void test01(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
System.out.println(sqlSession.getMapper(TeacherMapper.class).getTeacher(1));
sqlSession.close();
}
}
查询结果:
一对多
Student.java和Teacher.java
注意实体类与上面的相比有不同的地方
@Data
public class Student {
private int id;
private String name;
private Teacher teacher;// 多个学生关联一个老师,一个老师集合了多个学生
}
@Data
public class Teacher {
private int id;
private String name;
}
StudentMapper.java
public interface StudentMapper {
List<Student> getStudent();
}
StudentMapper.java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sun.dao.StudentMapper">
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
<select id="getStudent2" resultMap="StudentTeacher">
select s.id sid,s.name sname,t.name tname
from student s,teacher t
where s.tid=t.id
</select>
</mapper>
测试类
public class MapperTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studentList = mapper.getStudent2();
for (Student student : studentList) {
System.out.println(student);
}
sqlSession.close();
}
}
查询结果: