今天写博客的时候还是想对自己说几句话,坚持真的是一件很难的事情,你看转眼几天过去了,浑浑噩噩的过去了,什么都没有干,突然间就像是断了线的风筝没有了方向。我想要自己每个星期都要抽出一点时间来总结这周的学习进度,每天都要有进步,每天都要往自己的git上提交代码,每天都要写个人的日志来总结今天学了什么,都要写博客来记录自己的学习经历!@自己
一、对象关系映射
对象间主要分为两种:单向、双向
映射分为四种:1-1 1-n n-1 n-n
由此分析对象关系映射7种:
单向1-1
单向1-n(需熟练掌握的)
单向n-1(最常用的)
单向n-n
双向1-1
双向1-n
双向n-n(理解,可以用两个单向n-1来实现)
这里只记录最常用的两个
单向n-1
Person-Address(多人住一个地址)
Person的实体里有Address属性
public class Person {
private Integer id;
private String name;
private Address address;
}
public class Addressss{
private Integer id;
private String name;
}
Person配置(Person.hbm.xml):
<hibernate-mapping package="one_n_1">
<class name="Person" table="t_Person">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
<!-- 单向n-1
name,属性名
class,关联类
column,外键列明
-->
<many-to-one name="address" class="Address" column="address_id"></many-to-one>//重点
</class>
</hibernate-mapping>
Address的配置不变
<hibernate-mapping package="one_n_1">
<class name="Address" table="t_Address">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
单向1-1
实体跟上面单向n-1一样
唯一改变的地方是Person配置(Person.hbm.xml):
<many-to-one unique="true" name="address" class="Address" column="address_id"></many-to-one>
单项1-n
Person-Address(一个人住多个地址)
public class Person {
private Integer id;
private String name;
private Set<Address> addresses=new HashSet<Address>();
}
public class Address{
private Integer id;
private String name;
}
Person配置(Person.hbm.xml)
<hibernate-mapping package="one_1_n">
<class name="Person" table="t_Person">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
<!-- 单向1-n -->
<set name="addresses">
<!-- 指定关联列的外键 -->
<key column="person_id"/>
<!-- 关联的具体类 -->
<one-to-many class="Address"/>
</set>
</class>
</hibernate-mapping>
单向n-n
这里需要中间表来连接,跟单项1-n的变化是
Person配置(Person.hbm.xml):
<hibernate-mapping package="one_n_n">
<class name="Person" table="t_Person">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
<!-- 单向n-n
多对多,需要中间表来维系关系
-->
<set name="addresses" table="t_person_address">
<!-- 指定当前类在中间表中关联列的外键 -->
<key column="person_id"/>
<!-- 关联的具体类
column,关联类在中间表中关联列的外键
-->
<many-to-many class="Address" column="address_id"/>
</set>
</class>
</hibernate-mapping>
表关系如图所示
因为很多配置都是重复的所以只列举了改变的配置。
先写单向的吧,双向有时间在更。