本次以老师和学生两个对象和数据表举例,数据表数据如下:
特别说明:学生数据表里面的tid属性与老师数据表里面的id属性是关联关系。
1、多对一:
多个学生对应或关联一个老师,通过查询学生,并且能找到他们所关联的老师,站在学生的角度是”多对一“的关系。
1)、编写学生的实体类:
package com.bjpowernode.domian;
/**
* 多对一
*/
public class Student {
private Integer id;
private String name;
//多个学生关联一个老师
private Teacher teacher; // ---> private Integer tig;关联的是一个老师的对象
public Student(){
}
public Student(int id,String name){
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", teacher=" + teacher +
'}';
}
}
2)、编写查询接口。
查询所有学生的信息,以及学生所对应的老师信息
3)、编写Mapper.xml文件里面的查询sql语句。
特别注意:
如果我们在Mybatis框架里面按照在数据库上写查询的sql语句的逻辑来写,那么所查询出来的结果很有可能出现以下情况,学生所关联的老师,那一行的查询结果为null,原因很有可能是数据表里面的字段名和实体类里面的属性名不一致导致的。
解决方案:
使用
resultMap 结果集映射(解决实体类属性名称和数据表字段名不一致问题):
4)、测试
2、一对多:
一个老师,包含多个学生,他们之间是集合的关系,站在老师的角度就是”一对多“的关系。
1)、编写老师的实体类。
package com.bjpowernode.domian;
/**
* 一对多
*/
import java.util.List;
public class Teacher {
private Integer id;
private String name;
//一个老师包含多个学生,所以传过来的是一个Student集合
private List<Student> students;
public Teacher(){
}
public Teacher(Integer id, String name, List<Student> students) {
this.id = id;
this.name = name;
this.students = students;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", students=" + students +
'}';
}
}
2)、编写查询接口。
获取指定老师的id查询他所包含的所有学生以及该老师的相关信息
3)、编写Mapper.xml文件里面的查询sql语句。
4)、测试