一个学老师对应多个学生
● 1、环境搭建
● 2、建立实体类
○ 老师类
@Data
public class Teacher {
private int id;
private String name;
private List<Student> students;
}
○ 学生类
@Data
public class Student {
private int id;
private String name;
//
private int tid;
}
● TeacherMappder接口
//获取指定老师的信息和他的所有学生信息
Teacher getTandS(@Param("tid") int id);
Teacher getTandS2(@Param("tid") int id);
● 按照结果嵌套处理
<!--按照结果嵌套查询-->
<select id="getTandS" resultMap="TandS">
select t.name tname, t.id tid, s.id sid, s.name sname
from mybatis.student s,
mybatis.teacher t
where s.tid = t.id
and t.id = #{tid}
</select>
<resultMap id="TandS" type="teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!-- 在实体类中复杂数据类型修饰的变量要单独处理
对象类型用:association 集合类型用:collection
javaType="" 指定java中属性的类型
集合中的泛型信息用ofType获取 List<Student>
-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
● 按照查询嵌套处理
<select id="getTandS2" resultMap="TandS2">
select *
from mybatis.teacher
where id = #{tid}
</select>
<resultMap id="TandS2" type="teacher">
<collection property="students" column="id" javaType="ArrayList" ofType="Student" select="getStudent"/>
</resultMap>
<select id="getStudent" resultType="Student">
select *
from mybatis.student
where tid = #{tid}
</select>
小结
○ 1、关联association 【多对一】
○ 2、集合 collection 【一对多】
○ 3、javaType & ofType
■ 1、javaType 用来指定实体类中的属性类型
■ 2、ofType 用来指定映射到List或者集合中的poji类型,就是泛型中的约束类型
○ 注意点
■ 保证SQL的可读性,尽量保证通俗易懂
■ 注意一对多和多对一中,属性名和字段的问题!
■ 如果问题不好排查错误,可以使用日志,建议使用Log4j