• 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 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造成的。

     

     

    MybatisjdbcTypejavaType的对应关系

    复制代码
     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
    复制代码
     
     
  • 相关阅读:
    P2319 [HNOI2006]超级英雄
    P4302 [SCOI2003]字符串折叠
    P1122 最大子树和
    HDU——2089 不要62
    P4555 最长双回文串
    P1463 [HAOI2007]反素数
    P2412 查单词
    P2787 语文1(chin1)- 理理思维
    P3078 [USACO13MAR]扑克牌型Poker Hands
    ubuntu中desktop与alternate版本的区别(转载)
  • 原文地址:https://www.cnblogs.com/xd502djj/p/10187158.html
Copyright © 2020-2023  润新知