一、一对一关联
建立的数据表class(班级)含有班级信息和teacher(教师)信息,而教师信息在零一张表Teacher中;即class表与Teacher相互关联的;现在需要根据class表的id查询class信息和Teacher信息,这就涉及到一对一关联查询。
有两种方式:
方式一:嵌套结果
使用嵌套结果映射来处理重复的联合结果的子集来封装联表查询的数据(去除重复的数据)
select * from class c,teacher t where c.teacher_id = t.t_id and c.c_id = 1
方式二:嵌套查询通过执行另外一个SQL映射语句来返回预期的复杂类型:
SELECT * FROM class WHERE c_id =1;
SELECT * FROM teacher WHERE t_id =1;//1 是上一个查询得到的teacher_id的值
下面是具体步骤:
1 创建表(class、teacher)和数据
CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT
);
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES
teacher(t_id);
INSERT INTO teacher(t_name) VALUES('teacher1');
INSERT INTO teacher(t_name) VALUES('teacher2');
INSERT INTO class(c_name, teacher_id) VALUES('class_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('class_b', 2);
2 定义实体类:Classes.java、Teacher.java
package com.mybatis.entities;
public class Classes {
private int id;
private String name;
private Teacher teacher;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Teacher getTeach