映射是Mybatis的核心,表如何与类进行映射,完成先关的CRUD操作,是框架需要解决的问题。在解决单个表对应单个类的问题中,我已经在前面的几篇博文中有了比较详细的介绍。今天需要引出一个重要的新问题:如何让这种ORM映射支持一对一的表关联。(本文出自:http://my.oschina.net/happyBKs/blog/475129)
首先,SQL中的表关联查询,大家应该都不陌生,比如在一对一的表关联中,我们通过表连接,查询两个表中的各个字段的值。现在,我们用一个例子给出数据库的2个表定义,以及如何定义类及其类关联。
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('LS1');
INSERT INTO teacher(t_name) VALUES('LS2');
INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);
Teacher类和Classes类的定义:
package com.happyBKs.mybatis.C1_1.beans;
public class Teacher {
private int id;
private String name;
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(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Teacher() {
super();
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}
package com.happyBKs.mybatis.C1_1.beans;
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 getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher)