resultType 和 resultMap
resultType 和 resultMap 两个属性用于指定结果集封装对象,二者只能用一个, 通常能用resultType时, 优先适用resultType,resultMap 用于处理resultType 不能处理的场景。
resultType适用场景:
resultType 在自动封装java对象时,必须要求字段名和java中的属性名一致,或使用驼峰映射成功(需全局开启支持驼峰映射),而且类中属性只能是基本属性,不能有Java Object 属性。
测试:
resultMap适用场景:
1. 处理java 对象中属性名和字段名不一致问题
解决方法:
① 在SQL语句中给password起别名为pwd
② resultMap 进行映射,将password对应映射到pwd
元素 | 作用 |
---|---|
id | 将结果集标记为id,以方便全局调用 |
type | 类的完全限定名, 或者一个类型别名 |
result | 配置POJO到数据库列名映射关系 |
column | 数据库中的字段名或别名 |
property | 映射到实体类的属性名 |
其实只要显式地配置属性名与字段名不一致的即可
2. 处理一对一关系映射 association
首先定义一个学生Stu实体和一个老师Teacher实体,一个学生对应包含一个老师实体:
写一个StuMapper接口和相应的XML文件:
测试:
解决方法:
元素 | 作用 |
---|---|
association | 级联使用,处理对象,一对一关系 |
javaType | 一个完整的类名,或者是一个类型别名 |
jdbcType | 数据表中的对应字段的字段类型 |
① 按照查询嵌套处理——子查询
先查出所有的学生信息,然后根据查出的学生的tid查找对应的老师
② 按照结果嵌套处理——联表查询
第二种方法查询速度更快,推荐使用第二种方法
3. 处理一对多关系映射 collection
首先定义一个学生Stu实体和一个老师Teacher实体,一个老师对应包含多个学生实体:
写一个TeacherMapper接口和相应的XML文件:
测试:
解决方法:
元素 | 作用 |
---|---|
collection | 级联使用,处理集合,一对多关系 |
ofType | 指定集合的泛型 |