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

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


http://www.kler.cn/a/547825.html

相关文章:

  • 大数据学习(46) - Flink按键分区处理函数
  • Java版PDF拼接
  • 结合实际讲NR系列5——RRCResume
  • 分享一个使用的音频裁剪chrome扩展-Ringtone Maker
  • 【css实现边框圆角渐变效果】
  • 服务器安全——日志分析和扫描
  • 力扣19题——删除链表的倒数第 N 个结点
  • 股票自动化交易
  • 【20250215】二叉树:144.二叉树的前序遍历
  • Python网络编程
  • 无人机航迹规划: 梦境优化算法(Dream Optimization Algorithm,DOA)求解无人机路径规划MATLAB
  • python学opencv|读取图像(七十)使用cv2.HoughCircles()函数实现图像中的霍夫圆形检测
  • MES管理系统解决方案在制造企业中的实施路径
  • mybatis-lombok工具包介绍
  • 阿里云视频点播,基于thinkphp8上传视频
  • 游戏引擎学习第101天
  • 登录演示和功能拆解
  • Unity-New Input System
  • 【Film Shot】CineScale: Recognising Cinematic Features with AI
  • 审计费用差10倍?项目规模如何影响报价