MyBatis在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。
嵌套查询是指通过执行另外一条SQL映射语句来返回预期的复杂类型;
嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集;
1、一对一关系使用<resultMap>中的<association>子元素
该元素中包含以下属性:
property:指定映射到的实体类对象属性,与表字段一一对应。
column:指定表中对应的字段。
javaType:指定映射到实体对象属性的类型。
select:指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询。
fetchType:指定在关联查询时是否启用延迟加载。fetchType属性有lazy和eager两个属性值,默认值为lazy(延迟加载)。
案例:
1、目前有两张表:tb_idcard表和tb_person表
CREATE TABLE tb_idcard(
id INT PRIMARY KEY AUTO_INCREMENT,
CODE VARCHAR(18)
);
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)
);
2、定义实体类(使用Lombok简化getters and setters)
@Data
public class IdCard{
private Integer id;
private String code;
}
@Data
public class Person {
private Integer id;
private String name;
private Integer age;
private String sex;
private IdCard card; //一对一,关联的身份证
}
3、映射文件 IdCardMapper.xml
<mapper namespace="com.lzj.mapper.IdCardMapper">
<select id="findCodeById" parameterType="Integer" resultType&#