1.【1:1唯一外键】关联关系映射
*搭建关联关系
create table t_student35(
id number(5) primary key,
name varchar2(20),
age number(3)
);
create table t_computer35(
id number(5) primary key ,
brand varchar2(20),
price number(4),
s_id number(5) references t_student35(id) unique
);
*映射关联关系
<!-- Student -->
<class name="Student" table="t_student35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<!-- 关系属性:computer
1.关系属性名
2.关系对方
3.关系中的外键
4.级联
*注意 one-to-one 标签的默认行为,双方的主键相连
*通过property-ref="" 更改此默认行为,指定双方的连接的列
如下的配置【class="Computer" property-ref="student"】是在:
指定当前方:Student,应该连接对方:Computer 的student属性(对应的列 )
-->
<one-to-one class="Computer" property-ref="student" name="computer" cascade="save-update"></one-to-one>
</class>
<class name="Computer" table="t_computer35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="brand" type="java.lang.String"></property>
<property name="price" type="java.lang.Integer"></property>
<!-- 关系属性:student
1.关系属性名
2.关系对方
3.关系中的外键 column="外键列名"
4.级联
*unique="true"唯一约束
-->
<many-to-one unique="true" name="student" class="Student" column="s_id" cascade="save-update"></many-to-one>
</class>
*使用
==============================================================================================
2.【1:*关联关系映射】
*搭建关联关系
create table t_user35(
id number(5) primary key,
name varchar2(20),
age number(3)
);
create table t_order35(
id number(5) primary key,
price number(4),
note varchar2(20),
user_id number(5) references t_user35(id)
);
*映射关联关系
<!-- 1:* -->
<!-- User -->
<class name="User" table="t_user35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<!-- 关系属性: orders
1.关系属性名
2.关系对方
3.关系中的外键
4.级联
*inverse="true"==>告知主表不用维护外键,防止在主表级联插入从表时重复维护外键。
-->
<set name="orders" cascade="save-update,delete" inverse="true">
<!-- 映射关系中的外键的 -->
<key column="user_id"></key>
<one-to-many class="Order"/>
</set>
</class>
<!-- Order -->
<class name="Order" table="t_order35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="note" type="java.lang.String"></property>
<property name="price" type="java.lang.Integer"></property>
<!-- 关系属性: user
1.关系属性名
2.关系对方
3.关系中的外键
4.级联
-->
<many-to-one name="user" class="User" column="user_id" cascade="save-update"></many-to-one>
</class>
*使用关联关系
*使用【1:*】关系时,可以使用双向的也可以使用单向的。如果可以满足需求,则尽量让关系简单。
单向关系:关系映射在一方,另一方不映射关系