一个老师多个学生;
对于老师而言,就是一对多的关系;
1.环境搭建
- 导入lombok依赖
- 导入配置文件
- 导入java下的包
实体类
@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> student;
}
2. 按照结果嵌套嵌套处理
//获取指定老师下的所有学生及老师的信息
Teacher getTeacher( @Param("tid") int id);
<!--结果查询-->
<select id="getTeacher" 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"/>
<!--复杂的属性,我们需要单独处理 对象:association 集合:collection
javaType=""指定属性的类型!
集合中的泛型信息,我们使用ofType获取-->
<collection property="student" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
@Test
public void getTeacher(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
/*
输出结果
Teacher(id=1, name=秦老师,
student=[Student(id=1, name=小明, tid=1),
Student(id=2, name=小红, tid=1), Student(id=3, name=小张, tid=1),
Student(id=4, name=小李, tid=1), Student(id=5, name=小王, tid=1)])
*/
sqlSession.close();
}
小结
-
关联 - association 【多对一】
-
集合 - collection 【一对多】
-
javaType & ofType
-
JavaType用来:指定实体类中属性的类型
-
ofType用来:指定集合映射到List或者集合中的pojo类型,泛型中的约束类型
-
注意点:
-
保证SQL的可读性,尽量保证通俗易懂
-
注意一对多和多对一,属性名和字段的问题
-
如果问题不好排查错误,可以使用日志,建议使用Log4j
-
慢SQL 1s 1000s
面试高频
-
Mysql引擎
- 这两个引擎的区别
-
InnoDB底层原理
- 为什么使用InnoDB
-
索引(解决慢sql问题 1s 1000s)
- 索引的结构
- 索引有哪些
- 索引的分类
- 如何去操作
-
索引优化
- 什么优化索引