在MyBatis中,resultType
和resultMap
都是用于设置SQL查询结果的返回类型¹²³。以下是它们的详细介绍:
-
resultType¹²³:它是期望从这条语句中返回结果的类全限定名或别名。注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。使用
resultType
做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType
中的内容就是pojo在本项目中的位置。以下是一些映射规则:- 基本类型:
resultType
= 基本类型 - List类型:
resultType
= List中元素的类型 - Map类型:单条记录:
resultType
= map;多条记录:resultType
= Map中value的类型
- 基本类型:
-
resultMap¹²³:它是对外部
resultMap
的命名引用。结果映射是MyBatis最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。resultMap
和resultType
之间只能同时使用一个。
在MyBatis中,resultMap
是一个非常强大的元素,主要用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象
resultMap
元素的构成:
<resultMap id="" type="">
<constructor>
<idArg/>
<arg/>
</constructor>
<id/>
<result/>
<association property=""/>
<collection property=""/>
<discriminator javaType="">
<case value=""/>
</discriminator>
</resultMap>
其中:
id
属性代表这个resultMap
的标识。type
属性标识需要映射的POJO。我们可以使用MyBatis定义好的类的别名或自定义类的全限定名。constructor
元素用于配置构造方法。当一个POJO没有无参数构造方法时使用。id
和result
元素都有以下属性¹²³⁴:property
:映射到列结果的字段或属性。如果POJO的属性和SQL列名(column元素)是相同的,那么MyBatis就会映射到POJO上。column
:对应SQL列。javaType
:配置Java类型。jdbcType
:配置数据库类型。这是JDBC类型,MyBatis已经为我们做了限定,基本支持所有常用数据库类型。typeHandler
:类型处理器。允许你用特定的处理器来覆盖MyBatis默认的处理器。需要指定jdbcType和javaType相互转化的规则。
association
、collection
和discriminator
元素用在级联的情况下¹²³⁴。
需要注意的是,resultMap
和resultType
不能同时使用。
在实际使用中,如果你搜索只是返回一个值,比如说String ,或者是int,那你直接用resultType
就行了。但是你如果是返回一个复杂的对象,就可以使用resultMap