学习目标
● 了解数据表之间以及对象之间的三种关联关系
● 熟悉关联关系中的嵌套查询和嵌套结果
● 掌握一对一, 一对多和多对多关联映射的使用
1.1 关联关系概述
在关系型数据库中, 多表之间存在着三种关联关系, 分别为一对一, 一对多和多对多
这三种关联关系的具体说明如下.
. 一对一: 在任意一方引入对方主键作为外键.
. 一对多: 在 "多" 的一方, 添加 "一" 的一方的主键作为外键.
. 多对多: 产生中间关系表, 引入两张表的主键作为外键, 两个主键成为联合主键或使用新的字段作为主键.
1.2 一对一
在现实生活中, 一对一关联关系是十分常见的. 例如, 一个人只能有一个身份证, 同时一个身份证也只会对应一个人, 它们之间的关系模型图
那么使用 MyBatis 是怎么处理这种一对一关联关系的呢?
在 < resultMap > 元素中, 包含了一个 < association > 子元素,
MyBatis 就是通过该元素来处理一对一关联关系的. 在 < association > 元素中,
通常可以配置以下属性.
. property: 指定映射到的实体类对象属性, 与表字段一一对应.
. column: 指定表中对应的字段.
. javaType: 指定映射到实体对象属性的类型.
. select: 指定引入嵌套查询的子 SQL 语句, 该属性用于关联映射中的嵌套查询.
. fetchType: 指定在关联查询时是否启用延迟加载. fetchType 属性有 lazy 和 eager 两个属性值, 默认值为 lazy(即默认关联映射延迟加载).
为了更好的说明一对一的关系我们先创建两个数据表作为演示使用
(1) 创建数据表. 在 mybatis 数据库中分别创建名为 tb_idcard 和 tb_person 的数据表, 同时预先插入两条数据. 其执行的 SQL 语句如下所示.
- # 创建一个名称为 tb_idcard 的表
- create table tb_idcard(
- id int primary key auto_increment,
- code varchar(18)
- );
- # 插入两条数据
- insert into tb_idcard (code) values ("1234567890")
- insert into tb_idcard (code) values ("0987654321")
- # 创建一个名称为 tb_person 的表
- create table tb_person(
- id int primary key auto_increment,
- name varchar(32),
- age int,
- sex varchar(8),
- card_id int unique,
- foreign key (card_id) references tb_idcard(id)
- );
- # 插入两条数据
- insert into tb_person (name,age,sex,card_id) values ('Rose',29,'女',1);
- insert into tb_person (name,age,sex,card_id) values ('tom',27,'男',2);
(2) 在项目的 com.itheima.po 包下创建持久化类 IdCard 和 Person, 编辑后的代码, 如文件
来源: http://www.bubuko.com/infodetail-3373822.html