属性名与查询字段名不行同
resultType 可以将查询结果直接映射为实体 Bean 对象的条件是, SQL 查询的字段名与实体 Bean 的属性名--致。因为在将查询结果转换为指定类型对象时,系统自动将查询结果字段名称作为对象的属性名,通过反射机制完成对象的创建。
当 SQL 查询结果的字段名和实体 Bean 的属性名不一致时,将无法创建出需要类型的对象。此时有两种解决方案。.
搭建测试环境
项目: MyBatis_property_column_unsame,在上一个项目的基础上进行修改即可。
(1)修改 student 表
注意, DB 表的 score 字段名称与 Student 类的 score 属性相同,其他字段名与属性名均不相同。
(2)修改 Dao 接口
(3)修改测试类
(4)定义 Dao 实现类
查询字段使用别名
虽然属性名称与表中字段名称不一致,但可以为查询结果的字段名称赋予别名,让别名与实体Bean的属性名相同。这样框架也可以根据查询结果利用反射机制将对象创建。
在映射文件 mappe r中添加如下映射。注意,由于表的 score 字段名与 Student 类的属性名同名,所以这里无需使用别名。
使用结果集映射 resultMap
可以使用结果映射 resultMap (这里的Map是映射 mapper 的意思)来建立映射关系,
完成由字段到属性的映射,达到将查询结果封装为对象的目的。resultMap 是对resultType 的增强。
项目:MyBatis_property_column_unsame_2,在项目MyBatis_property_column_unsame基础上进行修改。
直接修改映射文件 mapper.xml。
<resultMap/>标签中定义了由 type 指定的类的属性名到表中字段名称的映射关系。根据这个映射关系,框架利用反射机制创建响应对象。
① type:指定要映射的实体类。
② id:指定该 resultMap 映射关系的名称。
③ <id>标签:id 的字段名 column 与实体类的属性 property 之间的映射关系。
④ <result>标签:id 以外替他字段名 column 与实体类的属性 property 之间的映射关系。
当然,对于字段名与实体类的属性名相同的情况,可以不写入<resultMap/>中。