当前位置: 首页 > news >正文

resultType,jdbcType,parameterType区别

1. resultType

用途
  • 用于定义 SQL 查询结果的返回类型

  • 直接将查询结果映射到指定的 Java 类型(基本类型、POJO 或 Map)。

特点
  • 要求数据库字段名与 Java 对象的属性名完全一致(或通过别名匹配)。

  • 适用于简单查询,无法处理复杂的嵌套映射(如关联对象或集合)。

示例
<select id="selectUser" resultType="com.example.User">
    SELECT id, name, age FROM users
</select>

这里,查询结果的字段 idnameage 必须与 User 类的属性名一致。

2. jdbcType

用途
  • 用于指定数据库字段的 JDBC 类型

  • 主要在以下场景中使用:

    • 当参数为 null 时,必须显式指定 jdbcType(因为 MyBatis 无法推断类型)。

    • 解决某些数据库(如 Oracle)对 null 值的严格类型校验问题。

特点
  • 是 JDBC 规范中定义的类型,例如 varcharintegerdate等。

  • 通常与  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 语句的参数类型

  • 可以是基本类型(如 intString)、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.关键区别

  1. resultType vs parameterType

    • resultType 关注返回结果的类型映射。

    • parameterType 关注输入参数的类型。

  2. jdbcType 的特殊性

    • jdbcType 是 JDBC 层面的类型标识,与数据库直接交互时使用。

    •    #{param} 表达式中,jdbcType 用于明确参数在数据库中的类型(尤其在参数为 null 时)。

6.常见问题

  1. 何时必须指定 jdbcType

    • 当参数可能为 null 时(如 Oracle 数据库严格要求 jdbcType)。

    • 示例: #{field, jdbcType=varchar}

  2. parameterType 是否可以省略?

    • 可以,MyBatis 会自动推断参数类型。但在多参数场景中,推荐使用 @Param 注解或 Map 传递参数。

  3. 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 值导致的数据库异常或类型不匹配)。

相关文章:

  • SQL-leetcode—1667. 修复表中的名字
  • Nginx 请求转发配置指南
  • Amazon Aurora:面向高吞吐量云原生关系型数据库的设计考虑
  • 性能测试工具
  • LLM之循环神经网络(RNN)
  • VMware Workstation Pro 下载(无需注册账号)
  • 使用 GPT-SoVITS 克隆声音,很详细
  • 蓝桥杯 Java B 组之总结与模拟题练习
  • Asp.Net Core MVC 中级开发教程
  • 计算机视觉:卷积神经网络(CNN)基本概念(二)
  • 09综合算法练习题
  • C++ 中的栈与堆:区别与使用场景详解
  • NLP 八股 DAY1:BERT
  • 双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
  • AI大模型+RPA
  • 分享在职同时准备系统分析师和教资考试的时间安排
  • autogen_core中的DataclassJsonMessageSerializer类
  • Mybatis高级(动态SQL)
  • 基于CanMV IDE 开发软件对K210图像识别模块的开发
  • 2025 (ISC)²CCSP 回忆录
  • 多所院校高规格召开考研动员会,有学院考研报名率达84%
  • 巴基斯坦外长访华是否与印巴局势有关?外交部:此访体现巴方高度重视中巴关系
  • 四大皆空!赛季还没结束,曼城已经吃上“散伙饭”了
  • 李洋谈美国黑帮电影与黑帮文化
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 独家 |《苏州河》上海上演,编剧海飞:上海的风能吹透我