Mybatis学习(5)单表的CURD操作-属性名与查询字段不相同

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SDDDLLL/article/details/84573065

在上一篇博客当中已经对单表的增删改查操作有课基本的认识,但是之前的增删改查操作都是在理想条件下完成的,也就是在没有出现其他情况的条件下出现的。现在考虑一下非理想条件下的情况。当属性名字与查询字段名字不相同的情况,

resultTpye可以将查询结果直接映射为实体bean对象的条件是,SQL查询的字段名与实体Bean的属性名一致。因为在将查询结果转换为指定类型的对象时,系统自动将查询结果字段名称作为对象的属性名,通过反射机制完成对象的创建。

当SQL查询结果的字段名与实体Bean的属性名不一致时候,将无法创建出需要类型的对象。此时有两种解决方案。

一、搭建测试环境

我们在之前的项目上进行更改,也就是在基本实现了CURD操作的项目上实现更改。

(1)修改DB中的student表

首先,我们的项目中的Student类中的score属性名与DB表的score字段名称一样,其他字段名与属性名均不相同。在这里我们将DB中的student表中的id->tid,name->tname,age->tage,score->score(不变)

(2)修改Dao接口

我们将其他的增删改查全部删掉,只保留一个接口

(3)定义Dao的实现类

将其他的全部删掉,只保留一个,也就是上面Dao中IStudent的接口实现方法

(4)修改测试类

我们将其他的全部删掉,只保留一个

(5)MybatisUtil类没有变化

二、解决方案

1、查询字段使用别名

虽然属性名称与表中字段名称不一致,但可以为查询结果的字段名称赋予别名,让别名与实体Bean的属性名相同。这样框架也可以根绝查询结果利用反射机制将对象创建。

现在我们在映射文件mapper中添加如下映射。注意由于DB表的score字段名与Student类的属性名相同,所以这里无需使用别名。

2、使用结果映射resultMap

可以使用结果映射resultMap来创建映射关系,完成由字段到属性的映射,达到将查询结果封装为对象的目的。resultMap是对resultType的增强。

OK,接下来我们在刚刚的基础上面,对mapper文件再进行修改,

<resultMap/>标签中定义了由type指定的类的属性名到表中字段名称的映射关系。根据这个映射关系,框架利用反射机制创建相应的对象。

  • type:指定要映射的实体类
  • id:指定该resultMap映射关系的名称
  • <id>标签:id的字段名column与实体类的属性property的映射关系
  • <result>标签:id以外其他字段名column与实体类的属性property间的映射关系,当然,对于字段名与实体类的属性相同的情况下,可以不写入<resultMap/>

猜你喜欢

转载自blog.csdn.net/SDDDLLL/article/details/84573065