在MyBatis中,resultType
和resultMap
都是用于处理查询结果的,但它们之间存在一些关键的区别。
-
映射方式:
resultType
:直接表示返回类型,它通常对应着Java模型对象(如POJO)中的实体。当查询出来的列名和Java对象的属性名一致时,MyBatis可以自动地将查询结果映射到这些属性上。这种方式比较直接和简单,但可能不适用于复杂的查询或需要特殊映射的场景。resultMap
:允许你自定义结果集的映射规则。它通常用于处理更复杂的查询结果,特别是当数据库中的列名和Java对象的属性名不完全一致,或者查询结果包含多个表的数据时。在resultMap
中,你可以通过<id>
、<result>
等标签来指定数据库列和Java对象属性之间的映射关系。
-
灵活性:
resultType
:相对简单,适用于简单的查询和映射。resultMap
:提供了更大的灵活性,允许你处理复杂的查询结果和映射规则。你可以使用<association>
和<collection>
等标签来处理一对多、多对一等复杂的关联关系。
-
使用场景:
- 当你的查询结果可以直接映射到Java对象的属性时,使用
resultType
可能是最简单的选择。 - 但是,当查询结果需要特殊的处理或映射,或者查询结果包含多个表的数据时,你可能需要使用
resultMap
来定义自定义的映射规则。
- 当你的查询结果可以直接映射到Java对象的属性时,使用
-
是否同时存在:
- 在一个查询映射中,
resultType
和resultMap
不能同时存在。你需要根据查询的复杂性和需求来选择使用哪一个。
- 在一个查询映射中,
-
返回值类型:
resultType
的返回值类型可以是基本类型、对象类型、List类型或Map类型等。你可以直接指定这些类型的全类名或别名。resultMap
则是对外部ResultMap的引用,你需要提前定义好db和model之间的映射关系。
总的来说,resultType
和resultMap
各有优缺点,你应该根据你的具体需求和使用场景来选择使用哪一个。