日常开发中,我们需要在mybatis.xml文件中,将数据库的查询结果映射到实体类中,那何时需要给字段起别名,何时不需要呢 ?总是不太清晰,接下来梳理记录一下。
至于一般什么时候,使用resultMap,一版什么时候使用别名呢,如果实体的每个字段都和数据库中的字段名称 是不一样的,那一般就采用的是ResultMap来对实体字段和数据库的字段进行统一的映射,
如果只是一两个字段是不一致的,则直接对不同的那两个字段起别名进行字段对应即可!。这是我的个人见解哈,如果有什么不足的,还请大家多多指教~
resultMap介绍
该标签的作用是自定义映射关系。
Mybatis可以将数据库结果封装到对象中,是因为结果集和对象属性名相同(也就是你写的pojo类型的参数名和数据库的字段名相同)
但是如果当他们不一样时,Mybatis就无法自动完成映射关系。
那我们该如何解决呢?
第一种方法我们可以起别名。
<select id="find" resultType="com.gq.pojo.Teacher"> select tid as id,tname as teacherName from teacher </select>
其中tid 、 tname都是数据库字段名称,但是pojo的字段名分别为id 、 teacherName 因为数据库字段名称和实体字段不一致,则无法直接映射上去,因此可以给数据库查出来的字段名 起成和数据库一样的字段名,这样就能自动映射过去了。
同样还有第二种办法:我们通过ResultMap标签来映射<select>的返回结果
例子:
<!-- id:自定义映射名 type:自定义映射的对象类型 --> <resultMap id="teacherMapper" type="com.itbaizhan.pojo.Teacher"> <!-- id定义主键列 property:POJO属性名 column:数据库列名 --> <id property="id" column="tid"></id> <!-- result定义普通列 property:POJO属性名 column:数据库列名 --> <result property="teacherName" column="tname"></result> </resultMap>
后面直接使用reultMap代替resultType
<select id="findAll" resultMap="teacherMapper"> select * from teacher </select>
三、一些标签的基本介绍
(1)id:该标签是表示主键
(2)result:一般属性用来配置映射关系的
(3)association标签:
property:表示pojo类集合中的属性
select:表示所需要的那个类的查询语句
column:从resultMap中传过去用作查询的参数
ofType:集合属性中的对象(可以不写)
(4)collection标签:
property:表示pojo类集合中的属性
select:表示所需要的那个类的查询语句
column:从resultMap中传过去用作查询的参数
ofType:集合属性中的对象(可以不写)
association和collection之间的区别就是前者是针对一个对象而言,后者是针对一个集合而言!
参考 : https://blog.csdn.net/gaoqiandr/article/details/132818768