mybatis中多对一和一对多映射、延迟加载
处理多对一映射关系
- 方式一:使用级联方式
- 方式二:使用association处理映射
- 方式三:分步查询
employeeMapper.xml
departmentMapper.xml
处理一对多映射关系
public class Dept {
private Integer did;
private String deptName;
private List emps;
//...构造器、get、set方法等
}
- 方式一:使用collection
- collection:用来处理一对多的映射关系
- ofType:表示该属性对饮的集合中存储的数据的类型
- 方式二:使用分步查询
departmentMapper.xml
EmployeeMapper.xml
延迟加载
- 分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载- 此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,
fetchType="lazy(延迟加载)|eager(立即加载)"