數(shù)據(jù)庫建表:
提倡粗粒度芳室,相關(guān)的字段放在一張表里面,減少外鍵之間的關(guān)系俊抵。
實(shí)體類:
實(shí)體類設(shè)計(jì)的時(shí)候提倡細(xì)粒度臀叙。
例子:
聯(lián)系方式和地址之間的關(guān)系是組合關(guān)系:
聯(lián)系方式和地址之間是組合關(guān)系。
實(shí)體類:
Contact類:
- id : int
- phoneNum : String
- homeAddress : Address
- workAddress : Address
- email : String
Address類:
- province : String
- city : String
- detail : String
- district : String
數(shù)據(jù)庫:
CONTACT表
pk:ID
PHONENUM
......
EMAIL
HOMEPROVINCE
HOMECITY
HOMEDISTRICT
contact的xml:
<!-- 映射組合關(guān)系中的部分實(shí)體
component:組合
name:整體類中的屬性名 -->
<component name="homeAddress" class="Address">
<property name="province" column="home_province"></property>
<property name="city" column="home_city"></property>
</component>
<component name="workAddress" class="Address">
<property name="province" column="work_province"></property>
<property name="city" column="work_city"></property>
</component>
使用注解方式配置:
address類:
@Embeddable:表示是嵌入類郎汪。
@Embeddable
public class Address {
}
contact類(整體類):
@Embedded:
@Embedded
@AttributeOverrides(value={
@AttributeOverride(
name="province",
column=@Column(name="home_province")),
@AttributeOverride(
name="city",
column=@Column(name="home_city"))
})
public Address getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(Address homeAddress) {
this.homeAddress = homeAddress;
}