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
目录
相关文章
|
7月前
|
Java 数据库连接 mybatis
MyBatis中支持的JdbcType 和JavaType
MyBatis中支持的JdbcType 和JavaType
138 3
|
8月前
|
Oracle 关系型数据库 Java
Mybatis JdbcType与Oracle、MySql数据类型对应列表
Mybatis JdbcType与Oracle、MySql数据类型对应列表
|
8月前
|
Java 数据库连接 mybatis
Mybatis中jdbcType和javaType的对应关系
Mybatis中jdbcType和javaType的对应关系
|
Oracle Java 关系型数据库
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
478 0
|
Java 关系型数据库 MySQL
MyBatis - jdbcType & javaType
MyBatis - jdbcType & javaType
110 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    
6272 0
|
2月前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
2月前
|
Java 数据库连接 Spring
Spring 整合mybatis
Spring 整合mybatis
29 2
|
18天前
|
Java 数据库连接 mybatis
在Spring Boot应用中集成MyBatis与MyBatis-Plus
在Spring Boot应用中集成MyBatis与MyBatis-Plus
55 5