一 OneToMany
一对多可以存在两种映射实现:外键关联或表关联。
create table customer (
id int(20) not null auto_increment,
name varchar(100),
primary key(id)
)
create table address (
id int(20) not null auto_increment,
province varchar(50),
city varchar(50),
postcode varchar(50),
detail varchar(50),
customer_id int(20),
primary key (id)
)
1 外键映射:
@Entity
@Table(name="customer")
public class CustomerEO implements java.io.Serializable {
@OneToMany(cascade={ CascadeType.ALL })
@JoinColumn(name="customer_id")
private Collection<AddressEO> addresses = new ArrayList<AddressEO>();
...
}
外键定义在多的一方,也就是address表中.
2 表映射
@Entity
@Table(name = "customer")
public class CustomerEO implements java.io.Serializable {
...
@OneToMany(cascade = { CascadeType.ALL })
@JoinTable(name="ref_customer_address",
joinColumns={ @JoinColumn(name="customer_id",referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="address_id",referencedColumnName="id")})
private Collection<AddressEO> addresses = new ArrayList<AddressEO>();
...
}
二 ManyToMany
多对多, 不赘述。
三 Mybatis 的映射关系
参考:https://www.yiibai.com/mybatis/
mybatis 是将对象与SQL语句进行映射,而对于复杂的映射关系,更适合在XML文件中进行定义。
映射关系的组建离不开ResultMap标签。
而对于一对多,多对一,多对多关系的定义利用了关键字:Collection , Association标签。