MyBatis的jdbcType和javaType详解

简介: JdbcType介绍数据库列字段都是有类型的,不同的数据库有不同的类型。为了表示这些数据类型,Java源码是采用枚举来定义的:

JdbcType介绍

数据库列字段都是有类型的,不同的数据库有不同的类型。为了表示这些数据类型,Java源码是采用枚举来定义的:

public enum JDBCType implements SQLType {
    TINYINT(Types.TINYINT),
    SMALLINT(Types.SMALLINT),
    INTEGER(Types.INTEGER)
}

枚举变量也是有类型的,也是有值的,正如整数变量是整数类型,也有值大小一样,上述枚举变量值的定义是通过Types来描述刻画的。

public class Types {
     public final static int TINYINT         =  -6;
     public final static int SMALLINT        =   5;
     public final static int INTEGER         =   4;  
}

MyBatis包含的JdbcType类型,主要有下面这些,大致了解一下即可:

BIT、FLOAT、CHAR 、TIMESTAMP 、 OTHER 、UNDEFINEDTINYINT 、REAL 、VARCHAR 、BINARY 、BLOB NVARCHAR、SMALLINT 、DOUBLE 、LONGVARCHAR 、VARBINARY 、CLOB、NCHAR、INTEGER、 NUMERIC、DATE 、LONGVARBINARY 、BOOLEAN 、NCLOB、BIGINT 、DECIMAL 、TIME 、NULL、CURSOR


上述JdbcType类型和Java类型的对应关系,可以参照下面的列表,不过不同数据库的JdbcType多少有些出入,请注意即可。

JDBC Type           Java Type  
CHAR                String  
VARCHAR             String  
LONGVARCHAR         String  
NUMERIC             java.math.BigDecimal  
DECIMAL             java.math.BigDecimal  
BIT                 boolean  
BOOLEAN             boolean  
TINYINT             byte  
SMALLINT            short  
INTEGER             INTEGER  
BIGINT              long  
REAL                float  
FLOAT               double  
DOUBLE              double  
BINARY              byte[]  
VARBINARY           byte[]  
LONGVARBINARY       byte[]  
DATE                java.sql.Date  
TIME                java.sql.Time  
TIMESTAMP           java.sql.Timestamp  
CLOB                Clob  
BLOB                Blob  
ARRAY               Array  
DISTINCT            mapping of underlying type  
STRUCT              Struct  
REF                 Ref  
DATALINK            java.net.URL

JdbcType类型的作用

在Mybatis明文建议在映射字段数据时需要将JdbcType属性加上,这样相对来说是比较安全的。

<insert id="saveRole">
    insert into role values (
        #{roleId},
        #{name},
        #{remarks},
        #{orderNo},
        #{createBy,jdbcType=VARCHAR},
        #{createDept,jdbcType=VARCHAR},
        #{createTime,jdbcType=DATE},
        #{updateBy,jdbcType=VARCHAR},
        #{updateTime,jdbcType=DATE}
    )
</insert>

这样,保证了前四种是不能为空的前提下,而后面几项为空时也不至于程序报错。如果createBy为空,插入的时候mybatis不知道具体转换成什么jdbcType类型,通常会使用一个默认设置,虽然默认配置一般情况下不会出错,但是遇到个别情况还是会有问题的。Mybatis经常出现的:无效的列类型: 1111 错误,就是因为没有设置JdbcType造成的。

Mybatis中jdbcType和javaType的对应关系

 1 JDBC Type           Java Type  
 2 CHAR                String  
 3 VARCHAR             String  
 4 LONGVARCHAR         String  
 5 NUMERIC             java.math.BigDecimal  
 6 DECIMAL             java.math.BigDecimal  
 7 BIT                 boolean  
 8 BOOLEAN             boolean  
 9 TINYINT             byte  
10 SMALLINT            short  
11 INTEGER             int  
12 BIGINT              long  
13 REAL                float  
14 FLOAT               double  
15 DOUBLE              double  
16 BINARY              byte[]  
17 VARBINARY           byte[]  
18 LONGVARBINARY               byte[]  
19 DATE                java.sql.Date  
20 TIME                java.sql.Time  
21 TIMESTAMP           java.sql.Timestamp  
22 CLOB                Clob  
23 BLOB                Blob  
24 ARRAY               Array  
25 DISTINCT            mapping of underlying type  
26 STRUCT              Struct  
27 REF                         Ref  
28 DATALINK            java.net.URL[color=red][/color]  

Mybatis JdbcType与Oracle、MySql数据类型对应列表

Mybatis    JdbcType    Oracle    MySql
JdbcType    ARRAY        
JdbcType    BIGINT               BIGINT
JdbcType    BINARY        
JdbcType    BIT        BIT
JdbcType    BLOB       BLOB      BLOB
JdbcType    BOOLEAN        
JdbcType    CHAR       CHAR      CHAR
JdbcType    CLOB       CLOB      CLOB
JdbcType    CURSOR        
JdbcType    DATE       DATE      DATE
JdbcType    DECIMAL    DECIMAL   DECIMAL
JdbcType    DOUBLE     NUMBER    DOUBLE
JdbcType    FLOAT      FLOAT     FLOAT
JdbcType    INTEGER    INTEGER   INTEGER
JdbcType    LONGVARBINARY        
JdbcType    LONGVARCHAR  LONG    VARCHAR    
JdbcType    NCHAR      NCHAR    
JdbcType    NCLOB      NCLOB    
JdbcType    NULL        
JdbcType    NUMERIC   NUMERIC/NUMBER  NUMERIC/
JdbcType    NVARCHAR        
JdbcType    OTHER        
JdbcType    REAL       REAL       REAL
JdbcType    SMALLINT   SMALLINT   SMALLINT
JdbcType    STRUCT        
JdbcType    TIME       TIME
JdbcType    TIMESTAMP  TIMESTAMP  TIMESTAMP/DATETIME
JdbcType    TINYINT    TINYINT
JdbcType    UNDEFINED        
JdbcType    VARBINARY        
JdbcType    VARCHAR    VARCHAR    VARCHAR
目录
相关文章
|
Java 数据库连接 mybatis
MyBatis中支持的JdbcType 和JavaType
MyBatis中支持的JdbcType 和JavaType
680 3
|
Oracle 关系型数据库 Java
Mybatis JdbcType与Oracle、MySql数据类型对应列表
Mybatis JdbcType与Oracle、MySql数据类型对应列表
466 0
|
Java 数据库连接 mybatis
Mybatis中jdbcType和javaType的对应关系
Mybatis中jdbcType和javaType的对应关系
181 0
|
Oracle Java 关系型数据库
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
869 0
|
Java 关系型数据库 MySQL
MyBatis - jdbcType & javaType
MyBatis - jdbcType & javaType
252 0
MyBatis - jdbcType & javaType
|
Oracle Java 关系型数据库
Mybatis JdbcType与Oracle、MySql数据类型对应列表
文章转自《http://blog.csdn.net/loongshawn/article/details/50496460》,感谢作者分享! 1. Mybatis JdbcType与Oracle、MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY    
6485 0
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
620 1
Spring boot 使用mybatis generator 自动生成代码插件
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
547 0
|
9月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
322 2