在使用 MyBatis 进行数据库操作时,我们经常会在 mapper.xml
中看到 parameterType
、resultType
、resultMap
等属性。它们虽然常见,但对于初学者来说容易混淆。本文将详细解释这三个属性的作用、使用场景与区别,并提供实例帮助理解。
一、parameterType:输入参数类型
parameterType
用于指定传入 SQL 的参数类型。
常见取值:
-
基本类型:
int
,long
,String
等; -
JavaBean 类型:如
User
; -
Map<String, Object>
; -
多个参数时推荐配合
@Param("xx")
使用。
示例:
<select id="selectUserById" parameterType="long" resultType="User"> SELECT * FROM user WHERE id = #{id}
</select>
传入参数是 Long 类型,用 #{id}
获取。
二、resultType:结果类型(简单映射)
resultType
表示 SQL 查询结果映射成什么 Java 类型。
常见类型:
-
基本类型:
int
,String
; -
实体类:如
User
; -
Map<String, Object>
;
示例:
<select id="getUsername" parameterType="int" resultType="string"> SELECT username FROM user WHERE id = #{id}
</select>
返回单个字段结果,直接映射成 String 类型。
注意:只有当查询结果的列名与 Java 字段名一致时,
resultType
才能自动映射成功。
三、resultMap:自定义映射(推荐使用)
当数据库字段与 Java 实体类属性名不一致,或者查询结果中包含嵌套对象时,建议使用 resultMap
。
示例:
数据库字段是 user_id
, user_name
,而 Java 实体类是 id
, userName
。
<resultMap id="userMap" type="User"> <id property="id" column="user_id"/> <result property="userName" column="user_name"/>
</resultMap>
<select id="selectUser" resultMap="userMap"> SELECT user_id, user_name FROM user
</select>
这样就能正确映射到实体类。
四、对比总结
项目 | 位置 | 描述 | 适用场景 |
---|---|---|---|
parameterType | <select> 等 | 设置 SQL 输入参数类型 | 单个对象/基本类型/Map |
resultType | <select> | 设置查询结果的返回 Java 类型 | 字段名与属性名一致,返回简单对象 |
resultMap | <select> | 自定义映射规则,字段名与属性名不一致或嵌套结构时 | 建议常用,更加灵活 |
五、建议与实践
在开发过程中:
-
若字段与实体类属性名完全一致,可用
resultType
简化; -
若存在不一致或嵌套关系,强烈建议使用
resultMap
,更清晰、灵活; -
入参类型最好明确写出,利于阅读与维护;
-
对于多参数建议使用
@Param
注解提升可读性。
补充:常用 Java 类型对应写法
Java 类型 | XML 写法 |
---|---|
int | int |
String | string |
Long | long |
User | com.xxx.model.User |
Map | map |
六、结语
掌握 MyBatis 的这三个核心属性,是写好 SQL 映射的基础。初学时可以先从简单的 resultType
入手,再逐步过渡到 resultMap
。希望这篇博客能帮助你扫清这些概念的障碍,为你后续开发打下基础。