MyBatis中关于resultType和resultMap的区别,看完这篇你就懂了

java爪哇帮

2021-04-08 20:02
关注

MyBatis中在进行查询时候,必须在mapper.xml文件中配置返回结果类型,那么在Mybatis里返回结果类型有两种resultType和resultMap,那么到底在返回结果时选择哪一个呢?

首先我们要知道不管选择哪一个,都要知道resultType和resultMap是不能同时存在的。

下面我们分别来看看他们在使用上的区别。

resultType是直接表示返回类型的。

如果查询结果只是返回一个值,比如返回String或int,那么可以使用resultType指定简单类型作为输出结果。

还有一种情况就是如果数据库表的字段名和实体bean对象的属性名一样时,那么也可以直接使用resultType返回结果。

下面以查询所有学生信息为例子。

Student类

上面属性名对应的数据库表中字段名id、name、email、phone。

StudentMapper.xml

MyBatis在执行sql语句时,会把查询出来的字段名和resultType定义实体bean对象的属性进行一一对应,然后再把查询到的值放到实体bean对象的属性中,完成赋值操作。但如果不一样,则会查询出空值。

而resultMap则是对外部ResultMap的引用,其实上面的查询也可以用resultMap返回结果。

那么它们之间到底有什么区别呢?

resultType不需要配置,但是resultMap要配置一下,将数据库表的字段名和实体bean对象类的属性名一一对应关系,这样的话就算你的数据库的字段名和你的实体类的属性名不一样也没有关系,都会给你对应的映射出来,所以resultMap要更强大一些。

就像上面说的那样,如果查询出来数据库字段名和要封装的实体bean对象属性值不相同时,这个时候只能使用resultMap来返回结果。

还有一个和resultType不同的地方在于resultMap可以用在复杂联合查询上,而resultType不可以。

比如有一个Dept部门类,其中有一个Employee员工列表的引用,那么在查询部门Dept的时候想把其对应的Employee员工列表也要查出来的话,就必须使用resultMap来返回结果。

Dept类
DeptMapper.xml

通过上面的比较和例子的使用,相信大家对它们的区别和使用已经掌握了,如果还有什么疑问,欢迎大家在下面留言交流。

举报/反馈