mybatis的jdbcType和javaType、oracle,MySQL的对应类型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 typebigdecimal转换为integer
STRUCT              Struct
REF                Ref
DATALINK            java.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.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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。