多对一的映射关系
创建Emp和Dept类
1.处理多对一映射关系方式一:级联属性赋值
2.处理多对一映射关系方式二:association实现
-
association:处理多对一的映射关系
-
property:需要处理多对的映射关系的属性名
-
javaType:该属性的类型
3.处理多对一映射关系方式三:分步查询
EmpMapper 接口中方法
/**
* 通过分步查询查询员工以及员工对应的部门信息
* 分布查询第一步:查询员工信息
*/
Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);
DeptMapper 接口中方法
/**
* 通过分步查询查询员工以及员工对应的部门信息
* 分布查询第二步:通过did查询员工所对应的部门
*/
Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);
EmpMappe.xml
-
select:设置分步查询的SQL的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)
-
column:设置分布查询的条件
DeptMapper.xml
测试
分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。
此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加载)|eager(立即加载)”
fetchType:当开启了延迟加载后
,可通过此属性手动控制延迟加载的效果
mybatis-config.xml 配置延迟加载
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
测试,查询员工信息
当关闭mybatis-config.xml 配置延迟加载
<!-- <setting name="lazyLoadingEnabled" value="true"/>-->
测试,查询员工信息,查询为员工信息以及员工所在部门
二、一对多映射关系
1.通过collection一对多映射关系
DeptMapper 接口中方法
/**
* 获取部门以及部门中所有的员工信息
*/
Dept getDeptAndEmp(@Param("did") Integer did);
DeptMapper.xml
-
collection:处理一对多的映射关系
-
ofType:表示该属性所对应的集合中存储数据的类型
测试
2.通过分步查询处理一对多映射关系
DeptMapper 接口中方法
/**
* 通过分步查询部门以及部门中所有的员工信息
* 分步查询第一步:查询部门信息
*/
Dept getDeptAndByStepOne(@Param("did") Integer did);
DeptMapper.xml
EmpMapper 接口中方法
/**
* 通过分步查询部门以及部门中所有的员工信息
* 分步查询第二步:根据部门id查询员工信息
*/
List<Emp> getDeptAndEmpStepTwo(@Param("did") Integer did);
EmpMapper.xml
测试