resultType,jdbcType,parameterType区别
- 开源代码
- 2025-09-10 05:21:02

1. resultType 用途:
用于定义 SQL 查询结果的返回类型。
直接将查询结果映射到指定的 Java 类型(基本类型、POJO 或 Map)。
特点:要求数据库字段名与 Java 对象的属性名完全一致(或通过别名匹配)。
适用于简单查询,无法处理复杂的嵌套映射(如关联对象或集合)。
示例: <select id="selectUser" resultType="com.example.User"> SELECT id, name, age FROM users </select>这里,查询结果的字段 id、name、age 必须与 User 类的属性名一致。
2. jdbcType 用途:用于指定数据库字段的 JDBC 类型。
主要在以下场景中使用:
当参数为 null 时,必须显式指定 jdbcType(因为 MyBatis 无法推断类型)。
解决某些数据库(如 Oracle)对 null 值的严格类型校验问题。
特点:是 JDBC 规范中定义的类型,例如 varchar、integer、date等。
通常与 parameterType 或 #{param} 表达式一起使用。
示例: <insert id="insertUser"> INSERT INTO users (name, age) VALUES (#{name, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER}) </insert>当 name 或 age 参数为 null 时,必须指定 jdbcType。
3. parameterType 用途:用于定义传入 SQL 语句的参数类型。
可以是基本类型(如 int、String)、POJO 或 Map。
特点:在 MyBatis 3.4.5 及更高版本中,可以省略 parameterType,因为框架会自动推断类型。
主要用于明确参数类型,或在动态 SQL 中辅助类型检查。
示例: <select id="selectUserById" parameterType="Long" resultType="User"> SELECT * FROM users WHERE id = #{id} </select>这里 parameterType="Long" 表示传入的参数 id 是 Long 类型。
4.对比总结: 5.关键区别:resultType vs parameterType
resultType 关注返回结果的类型映射。
parameterType 关注输入参数的类型。
jdbcType 的特殊性
jdbcType 是 JDBC 层面的类型标识,与数据库直接交互时使用。
在 #{param} 表达式中,jdbcType 用于明确参数在数据库中的类型(尤其在参数为 null 时)。
6.常见问题:何时必须指定 jdbcType?
当参数可能为 null 时(如 Oracle 数据库严格要求 jdbcType)。
示例: #{field, jdbcType=varchar}。
parameterType 是否可以省略?
可以,MyBatis 会自动推断参数类型。但在多参数场景中,推荐使用 @Param 注解或 Map 传递参数。
resultType 和 resultMap 如何选择?
简单映射用 resultType,复杂映射(如字段名不一致、嵌套对象)用 resultMap。
7.示例场景: 插入数据(使用 jdbcType): <insert id="insertUser"> INSERT INTO users (name, age) VALUES ( #{name, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER} ) </insert>多参数查询(省略 parameterType):
<select id="selectUserByCondition" resultType="User"> SELECT * FROM users WHERE name = #{name} AND age = #{age} </select> 总结:resultType:简化结果映射,要求字段与属性名一致。
jdbcType:解决 null 值问题和数据库类型匹配。
parameterType:明确输入参数类型(可省略,自动推断)。
理解这三个配置项的区别,可以避免常见的 MyBatis 映射错误(如 null 值导致的数据库异常或类型不匹配)。
resultType,jdbcType,parameterType区别由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“resultType,jdbcType,parameterType区别”
上一篇
回归新系列——网络安全实操干货系列——KaliLinux新版
下一篇
性能测试工具