- 根据sex的值去决定使用MaleEmployee或者是FemaleEmployee的resultMap去映射,这便是鉴别器
我的理解(等待验证): - 如果不设置延迟加载,用户查询时会直接出现1+N 次查询,获取到所有结果
- 延迟加载将采取默认规则,按树的层级加载
- 设置懒加载,仅仅查询1次,在关联属性 get、is、equals 等方法调用时触发N次关联查询(aggressiveLazyLoading 默认是true)
- aggressiveLazyLoading设置为true时,属性按需加载
验证理解: - lazyLoadingEnabled 也是一个开关,它来控制是否使用延迟加载的功能,但是延迟加载将采取默认规则,按树的层级加载,详细情况下篇我们在谈
- aggressiveLazyLoading 如果设置它为false,则它不会按树的层级加载
总结理解: - lazyLoadingEnabled 设置懒加载,为true 时,每次加载触发一层(默认)
- aggressiveLazyLoading 每一个对象包含多个懒属性,一个懒属性触发条件所有懒属性加载
- aggressiveLazyLoading 设置为false,配合fetchType 设置部分懒属性加载、部分懒属性不加载
树形层级加载: - MyBatis会把员工和鉴别器,健康情况当做树形的第一层级加载,所以运行了2个SQL
- 负责项目信息和员工卡是同一个层级,所以MyBatis会连同该员工负责的项目也同时加载进来
非全局定义延迟加载策略: - 在关联的元素(association ,collection ,discriminator)中,我们存在一个属性:fetchType来决定是否需要延迟加载,如果配置它,它将覆盖掉原有在MyBatis设置的策略
- 它有两个取值:
- lazy: 延迟加载
- eager:即刻加载
最新官网解释:
|