在关系型数据库中,我们经常要处理一对一 、 一对多的关系 。 例如, 一辆汽车需要有一个引擎,这是一对一的
关系。 一辆汽车有 4 个或更多个轮子,这是一对多的关系 。关联元素就是专门用来处理关联关系的。
在java类中关联关系也有三种,一对一,一对多,多对多
一对一 在本类中定义对方类型的对象,如A类中定义B类类型的属性b,B类中定义A类类型的属性a
一对多 一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a
多对多 在A类中定义B类类型的集合,在B类中定义A类类型的集合
一 、两种关联方式
嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
对于嵌套查询可以使用懒加载方法实现优化
*Mybatis的延迟加载配置
在全局配置文件中加入下面代码
<settings>
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
在映射文件中,<association>元素和<collection>元素中都已默认配置了延迟加载属性,即默认属性fetchType="lazy"(属性fetchType="eager"表示立即加载),所以在配置文件中开启延迟加载后,无需在映射文件中再做配置
二 、具体分析
2.1 一对一关系查询 <association>标签
使用<association>元素进行一对一关联映射非常简单,只需要参考如下两种示例配置即可
下面使用一个例子来验证。有两个对象,一个为员工、一个为职位。员工对象中包含职位 为一对一关系。
public class TUser {
private Integer id;
private String userName;
private String realName;
private Byte sex;
private String mobile;
private String email;
private String note;
private Integer positionId;
//职位
private TPosition position;
}
public class TPosition {
private Integer id;
//职位
private String postName;
private String note;
}
嵌套结果
<resultMap id="BaseResul