版本:idea2020.1.1 jdk1.8 maven3.6.3
注:本文章摘自Java EE企业级应用开发教程,黑马程序员/编著,仅用于记录学习笔记,分享学习经历。
一对一:在任意一方引入对方主键作为外键
一对多:在多的一方,添加一的一方的主键作为外键
多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键
属性 | 说明 |
---|---|
property | 指定映射到的实体类对象属性,与表字段一一对应 |
column | 指定表中对应的字段 |
javaType | 指定映射到实体对象属性的类型 |
select | 指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询 |
fetchType | 指定在关联查询时是否启用延迟加载。此属性具有lazy和eager两个属性值,默认值为lazy(默认关联映射延迟加载) |
ofType | 与javaType对应(collection元素专有) |
一、一对一关联关系<association>
在<resultMap>元素中,包含了一个<association>子元素,MyBatis通过此元素处理一对一关联关系。
<!--一对一,嵌套查询-->
<!--通过执行另一条SQL语句来返回预期的复杂类型-->
<association property="card" column="card_id" javaType="com.jc.pojo.Card" select="com.jc.pojo.Card.findCardById"/>
<!--一对一,嵌套结果-->
<!--使用嵌套结果映射来处理重复的联合结果的子集-->
<association property="card" javaType="com.jc.pojo.Card">
<id property="id" column="card_id"/>
<result property="code" column="code"/>
</association>
新建表 ——> 新建po类(2个) ——> 新建IdCardMapper.xml和PersonMapper.xml ——> mybatis-config.xml关联Mapper.xml ——>测试
CREATE TABLE IF NOT EXISTS `idcard` (
`id` int(10) NOT NULL auto_increment,
`code` varchar(50) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `idcard` (`id`, `code`) VALUES
(1, '152221198711020624'),
(2, '152201199008150317');
CREATE TABLE IF NOT EXISTS `person` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '0',
`age` int(11) NOT NULL default '0',
`sex` varchar(50) NOT NULL default '0',
`idcardid` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `idcardid` (`idcardid`),
CONSTRAINT `idcardid` FOREIGN KEY (`idcardid`) REFERENCES `idcard` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `person` (`id`, `name`, `age`, `sex`, `idcardid`) VALUES
(1, 'Rose', 29, '女', 1),
(2, 'Tom', 27, '男', 2);
public class IdCard {
private Integer id;
private String code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "IdCard{" +
"id=" + id +
", code='" + code + '\'' +
'}';
}
}
public class Person {
private Integer id;
private String name;
private Integer age;
private String sex;
private IdCard card;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}