目录
问题、需求
数据库设置方法
解决多对一问题
实体类的设置方法
sql语句
业务层
xml的写法
查询结果
解决一对多问题
实体类设置
sql语句
业务层
xml写法
查询结果
多对一问题:查出每个学生的信息,并 查出他班主任的信息
一对多问题:查出每个老师的信息,并 查出他的所有学生的信息
一对多:一个班主任有很多的学生
多对一:很多学生有一个班主任
在多的那一方添加一个字段,这个字段取自于一的那一方表的id
为什么是一的那一方的id而不是name?
这里只能选一的那一方的id,如果你选择了一的那一方的name,那耦合度就很高了,如果班级改名字了,那你就得改两个表,而id就不会出现这种问题,这叫解耦
学生表,需要注意的是:t_id 表示学生对应的班主任
班主任表
多对一问题:查出每个学生的信息,并 查出他班主任的信息
学生类:额外加上一个老师类的对象,用来查询这个学生对应的班主任
注意自己加上get、set、toString
private Integer id;
private String Sname;
private String sex;
private Integer age;
private Integer t_id;
//Teacher属性用于查询学生的老师时使用
private Teacher teacher;
班主任类:中规中矩
private Integer id;
private String Tname;
下面两种都可以
select * from student left join teacher on student.t_id = teacher.id;
SELECT * FROM student s,teacher t where s.t_id = t.id
// 查询每个老师的信息以及其对应学生 1
public List getTeacher1();
// 查询每个老师的信息以及对应学生 2
public List getTeacher2();
第一种形式:按照查询嵌套处理
就是将两个查询语句嵌套起来
第二种形式:按照结果嵌套处理
就是对复杂字段进行单独处理
一对多问题:查出每个老师的信息,并 查出他的所有学生的信息
学生类:中规中矩
private Integer id;
private String Sname;
private String sex;
private Integer age;
private Integer t_id;
班主任类:需要加上一个学生集合
private Integer id;
private String Tname;
//Student集合 用于查询老师的学生时使用
private List students;
下面两种都可以
SELECT * FROM teacher
LEFT JOIN student on student.t_id = teacher.id
SELECT * FROM student s,teacher t where s.t_id = t.id
//查询每个学生的信息以及其对应的老师:方法1
public List getStudent1();
//查询每个学生的的信息以及其对应的老师:方法2
public List getStudent2();
第一种形式:按照查询嵌套处理
就是在xml里面嵌套两个查询语句
第二种形式:按照结果嵌套处理
在xml里面,对复杂的属性(这里就是学生的信息是复杂的)单独处理