MyBatis中jdbcType和javaType的映射关系

JDBC TypeJava Type
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
CLOBClob
BLOBBlob
ARRAYArray
DISTINCTmapping of underlying type
STRUCTStruct
REFRef
DATALINKjava.net.URL
### MyBatis 中 @Result 注解的 jdbcType javaType 属性详解 #### 一、jdbcType 属性的作用与使用方法 `jdbcType` 是 `@Result` 注解中的一个重要属性,主要用于处理数据库字段可能为空的情况。当 SQL 查询返回的结果集中某列值为 NULL 时,JDBC 驱动程序通常会要求开发者显式指定该列对应的 JDBC 类型。如果没有设置 `jdbcType`,MyBatis 默认将其视为 OTHER 类型[^1]。 通过在 `@Result` 注解中配置 `jdbcType`,可以确保即使查询结果中有 NULL 值也能正常映射到 Java 对象上。例如: ```java @Results({ @Result(property = "id", column = "user_id", jdbcType = JdbcType.INTEGER), @Result(property = "name", column = "user_name", jdbcType = JdbcType.VARCHAR) }) ``` 上述代码片段展示了如何为不同的字段分别指定其 JDBC 类型。其中,`property` 表示目标对象的属性名,而 `column` 则对应数据库表中的列名。 --- #### 二、javaType 属性的作用与使用方法 `javaType` 属性用于定义当前数据库字段应映射至的目标 Java 数据类型。虽然大多数情况下 MyBatis 能够自动推断出合适的 Java 类型,但在某些特殊场景下(如自定义数据类型),仍需手动指定 `javaType` 来避免潜在错误。 下面是一个例子,展示了一个日期字段被正确映射成 Java 的 Date 类型的过程: ```java @Results({ @Result(property = "birthDate", column = "birthdate", javaType = java.util.Date.class, jdbcType = JdbcType.DATE) }) ``` 在此处,我们不仅指定了 `javaType` 作为 `java.util.Date`,还设置了相应的 `jdbcType` 以匹配数据库中的 DATE 或 TIMESTAMP 字段。 --- #### 三、两者的区别对比分析 | **特性** | **jdbcType** | **javaType** | |------------------|-------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| | 定义范围 | 描述的是底层数据库层面的数据类型 | 明确指出最终要转换为何种 Java 数据结构 | | 使用目的 | 主要是针对 NULL 参数或者复杂类型提供更精确的支持 | 解决因类型不一致引发的各种异常 | | 是否强制设定 | 当存在 NULL 可能性时建议填写 | 如果能够成功解析则无需额外声明 | 需要注意的是,在实际开发过程中,合理搭配这两个参数可以帮助提升系统的稳定性兼容性[^2]。 --- ### 总结 综上所述,`jdbcType` 更加贴近于数据库端的操作需求;而 `javaType` 则侧重于满足业务逻辑层面对数据形式的要求。两者各有侧重点又相辅相成,共同构成了 MyBatis 结果集映射机制的重要组成部分[^3]。 ```java // 综合案例演示 @Results(id="userResultMap",value={ @Result(column="uid", property="userId", jdbcType=JdbcType.BIGINT, javaType=Integer.class), @Result(column="username", property="userName", jdbcType=JdbcType.VARCHAR, javaType=String.class), @Result(column="email_addr", property="emailAddress", jdbcType=JdbcType.VARCHAR, javaType=String.class) }) public List<User> selectUsers(); ``` 以上代码充分体现了 `jdbcType` `javaType` 在具体项目实践中的应用方式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值