MyBatis的关联映射

本小妞迷上赌 提交于 2020-01-10 05:15:04

学习目标

● 了解数据表之间以及对象之间的三种关联关系

● 熟悉关联关系中的嵌套查询和嵌套结果

● 掌握一对一、一对多和多对多关联映射的使用

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,编辑后的代码,如文件

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!