在mybatis中,并没有像hibernate中那么多的关系标签,one-to-one,one-to-many,many-to-one,many-to-many,在mybatis中,只存在一和多的关系标签,对应数据库来说,就是有别的表外键(并不一定设置外键,只是有一个字段对应别的表的主键,这里是为了方便叙述,下同)的表对应多,另一边对应一,多对多,则两边都用多的关系标签,这么说可能会有些模糊,看完下面的例子应该就会清楚许多了
一对一的关系在数据库中并不多见,因为原则上说,一对一关系的两个表,完全可以合成一张表,
下面以学生表和学生证表为例,演示一对一的双向关联,学生证表中设有学生表的id
学生表有四个字段,sid,name,age,birthday,学生证表有两个字段,id 和stu_id.
在这里提一点,用mybatis设计表的时候,最好能让每个表中字段名称不一样,可以在每个字段的前面加上表的缩写,这样在用连接查询的时候,可以不用把表的每个属性写出来设置别名
学生表对应的实体:
package com.entity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Student {
private Integer id;
private String name;
private Integer age;
private Date birthday;
private List<Paper> paper = new ArrayList<Paper>();
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public List<Paper> getPaper() {
return paper;
}
public void setPaper(List<Paper> paper) {
this.paper = paper;
}
}
一如本文开头所说,有外键的表为多的一方,虽然实际情况是一对一的关系,但是从数据库的角度考虑,一个学生可以有多个学生证,因此在学生表中有多个学生证的实体对象,也就是学生证对象的集合,在这里用ArrayList集合,这也是为了和配置文件相照应,
顺带提一下,对于日期属性,一般情况下可以用String,数据库可以用VARCHAR2,这里设置成Date型,是为了验证配置文件中属性类型的设置,见下面配置文件
下面是学生证表对应的实体类:
package com.entity;
public class Paper {
private Integer id;
private Student student;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
然后是xml配置文件
Student.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTY