当实体类中的属性名和数据库中的属性名不一致时
输出时并不会报异常,而是对于属性值不一样的值,输出结果为 null
解决方案:
mapUnderscoreToCamelCase
resultMap:设置自定义映射
属性:
id:表示自定义映射的唯一标识
type:查询的数据要映射的实体类的类型
子标签:
id:设置主键的映射关系
result:设置普通字段的映射关系
property:设置映射关系中实体类中的属性名
column:设置映射关系中表中的字段名
/*** 分布查询第一步* @param eid* @return*/Emp getEmpByStepOne(@Param("eid") Integer eid);
/*** 分布查询第二步* @param did* @return*/Dept getDeptByStepTwo(@Param("did") Integer did);
分布查询的优点:
可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的 sql。此时可通过 association 和 collection 中的 fetchType 属性设置当前的分步查询是否使用延迟加载,fetchType = “lazy(延迟加载)|eager(立即加载)”
lazyLoadingEnabled
@Testpublic void testGetEmpAndDeptByStep(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp empByStepOne = empMapper.getEmpByStepOne(5);System.out.println(empByStepOne.getEmpName());}
只执行第一个 sql 语句
aggressiveLazyLoading
开启之后,是立即加载
fetchType
fetchType 的值为 eager,为立即加载,即使全局配置中设置为延迟加载,fetchType 可以按需设置为立即加载
此时为 延迟加载
/*** 查询部门中的所有员工信息* @param did* @return*/Dept getDeptEmpByDid(@Param("did") Integer did);
/*** 分布查询第一步* @param did* @return*/Dept getDeptByStep(@Param("did") Integer did);
/*** 分组查询第二步* @param did* @return*/Emp getEmpByStep(@Param("did") Integer did);