概述
<resultMap>标签写在mapper.xml中,由程序员控制SQL查询结果与实体类的映射关系。
resultMap属性与resultType属性不同时使用
- 使用resultType属性,mybatis默认使用Auto Mapping特性,数据表中的列名与实体类中的属性名要相同才能自动映射成功。
- 使用<resultMap>标签时,实体类中的属性名与数据表中的列名可以不相同,<select>标签不写resultType属性,而是使用resultMap属性引用<resultMap>标签。
- 使用resultMap实现单表映射关系
id | name |
1 | 学生1 |
2 | 学生2 |
实体类:
public class Student{
private int id1;
private String name1;
}
mapper.xml代码
<resultMap type="" id="mymap">
<!-- type对应返回类型,这里对应的是实体类,采用的是别名的方式 -->
<!--主键使用id标签配置映射关系,column对应数据表中的列,property对应实体类中的属性-->
<id column="id" property="id1"/>
<!--其他列使用result标签配置映射关系-->
<result column="name" property="name1"/>
</resultMap>
<select id="selAll" resultMap="mymap">
<!--resultMap的值对应resultMap标签对应的id-->
select * from student
</select>
-
使用resultMap实现关联单个对象(N+1方式),也就是说表中有一个字段是另一个表的外键。
N+1查询方式:先查询出某个表的全部信息,根据这个表的信息查询另一个表的信息。
- 与业务装配的区别
业务装配是在service里面写代码,而使用resultMap映射方法是由mybatis完成装配。
<!--如果关联一个对象在resultMap标签中使用association标签-->
<!--property中的teacher对应的是student实体中的一个属性Teacher类型-->
<association property="teacher" select="com.ccnu.mapper.TeacherMapper.selById" column="tid"></association>
<!--select中对应teachermapper.xml中一个查询方法的id-->
<!--column对应把哪列的值传递给查询方法作为参数-->
注意:column中对应的列名Mybatis在传递参数时,默认只会装配一次,所以就算该属性名与数据库中的列名是否一致,不能使用Auto Mapping方式,必须使用resultMap标签进行映射。
-
使用resultMap查询关联集合对象(N+1)
在查询中出现一对多的情况,需要关联集合对象,使用<collection>标签,用法与上述<association>类似。
最后
以上就是甜美花卷为你收集整理的MyBatis学习-resultMap属性的全部内容,希望文章能够帮你解决MyBatis学习-resultMap属性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复