学习目标
● 了解数据表之间以及对象之间的三种关联关系
● 熟悉关联关系中的嵌套查询和嵌套结果
● 掌握一对一、一对多和多对多关联映射的使用
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,编辑后的代码,如文件
来源:https://www.cnblogs.com/byczyz/p/12174366.html