主页 > 开源代码  > 

resultType,jdbcType,parameterType区别

resultType,jdbcType,parameterType区别
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区别