小墨の博客

梦想需要付诸行动,否则只能是梦

【转】 MyBatis JdbcType 与Oracle、MySQL数据类型对应关系详解

本文内容全文摘录自博客:https://blog.csdn.net/beidaol/article/details/91949191

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

MybatisJdbcTypeOracleMySql
JdbcTypeARRAY  
JdbcTypeBIGINT BIGINT
JdbcTypeBINARY  
JdbcTypeBIT BIT
JdbcTypeBLOBBLOBBLOB
JdbcTypeBOOLEAN  
dbcTypeCHARCHARCHAR
JdbcTypeCLOBCLOBCLOB–>修改为TEXT
JdbcTypeCURSOR  
JdbcTypeDATEDATEDATE
JdbcTypeDECIMALDECIMALDECIMAL
JdbcTypeDOUBLENUMBERDOUBLE
JdbcTypeFLOATFLOATFLOAT
JdbcTypeINTEGERINTEGERINTEGER
JdbcTypeLONGVARBINARY  
JdbcTypeLONGVARCHARLONG VARCHAR 
JdbcTypeNCHARNCHAR 
JdbcTypeNCLOBNCLOB 
JdbcTypeNULL  
JdbcTypeNUMERICNUMERIC/NUMBERNUMERIC/
JdbcTypeNVARCHAR  
JdbcTypeOTHER  
JdbcTypeREALREALREAL
JdbcTypeSMALLINTSMALLINTSMALLINT
JdbcTypeSTRUCT  
JdbcTypeTIME TIME
JdbcTypeTIMESTAMPTIMESTAMPTIMESTAMP/DATETIME
JdbcTypeTINYINT TINYINT
JdbcTypeUNDEFINED  
JdbcTypeVARBINARY  
JdbcTypeVARCHARVARCHARVARCHAR

 

注意到, MyBatis的JdbcType中部分没有对应到Oracle和Mysql的数据类型中(或许由于自己遗漏),不过不用担心,后续大家碰到再具体分析;同时上述对应关系不一定是一一对应,请大家了解。

大家主要掌握基本的数字、时间、字符串就足以应对日常开发了。

2、 Mybatis JdbcType官方文档

Mybatis JdbcType官方文档

 3、jdbcType与javaType

转自:https://blog.csdn.net/QSpace/article/details/84279994

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				int
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[color=red][/color]

4、实例

<resultMap type="java.util.Map" id="resultjcm">
  <result property="FLD_NUMBER" column="FLD_NUMBER" javaType="double" jdbcType="NUMERIC"/>
  <result property="FLD_VARCHAR" column="FLD_VARCHAR" javaType="string" jdbcType="VARCHAR"/>
  <result property="FLD_DATE" column="FLD_DATE" javaType="java.sql.Date" jdbcType="DATE"/>
  <result property="FLD_INTEGER" column="FLD_INTEGER"  javaType="int" jdbcType="INTEGER"/>
  <result property="FLD_DOUBLE" column="FLD_DOUBLE"  javaType="double" jdbcType="DOUBLE"/>
  <result property="FLD_LONG" column="FLD_LONG"  javaType="long" jdbcType="INTEGER"/>
  <result property="FLD_CHAR" column="FLD_CHAR"  javaType="string" jdbcType="CHAR"/>
  <result property="FLD_BLOB" column="FLD_BLOB"  javaType="[B" jdbcType="BLOB" />
  <result property="FLD_CLOB" column="FLD_CLOB"  javaType="string" jdbcType="CLOB"/>
  <result property="FLD_FLOAT" column="FLD_FLOAT"  javaType="float" jdbcType="FLOAT"/>
  <result property="FLD_TIMESTAMP" column="FLD_TIMESTAMP"  javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/>
 </resultMap>

MyBatis 通过包含的jdbcType类型

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

 5、oracle中DATE查询和插入

 执行查询语句时,oracle里的Date类型字段只精确到年月日,后面时分秒都为零。

 jdbcType="DATE"时候,存入到数据库中的字段只有年月日。改成 jdbcType="TIMESTAMP" 就可以。

 6、oracle数据类型和对应的java类型

SQL数据类型JDBC类型代码标准的Java类型Oracle扩展的Java类型
 

1.0标准的JDBC类型:

  

CHAR

java.sql.Types.CHAR

java.lang.String

oracle.sql.CHAR

VARCHAR2

java.sql.Types.VARCHAR

java.lang.String

oracle.sql.CHAR

LONG

java.sql.Types.LONGVARCHAR

java.lang.String

oracle.sql.CHAR

NUMBER

java.sql.Types.NUMERIC

java.math.BigDecimal

oracle.sql.NUMBER

NUMBER

java.sql.Types.DECIMAL

java.math.BigDecimal

oracle.sql.NUMBER

NUMBER

java.sql.Types.BIT

boolean

oracle.sql.NUMBER

NUMBER

java.sql.Types.TINYINT

byte

oracle.sql.NUMBER

NUMBER

java.sql.Types.SMALLINT

short

oracle.sql.NUMBER

NUMBER

java.sql.Types.INTEGER

int

oracle.sql.NUMBER

NUMBER

java.sql.Types.BIGINT

long

oracle.sql.NUMBER

NUMBER

java.sql.Types.REAL

float

oracle.sql.NUMBER

NUMBER

java.sql.Types.FLOAT

double

oracle.sql.NUMBER

NUMBER

java.sql.Types.DOUBLE

double

oracle.sql.NUMBER

RAW

java.sql.Types.BINARY

byte[]

oracle.sql.RAW

RAW

java.sql.Types.VARBINARY

byte[]

oracle.sql.RAW

LONGRAW

java.sql.Types.LONGVARBINARY

byte[]

oracle.sql.RAW

DATE

java.sql.Types.DATE

java.sql.Date

oracle.sql.DATE

DATE

java.sql.Types.TIME

java.sql.Time

oracle.sql.DATE

TIMESTAMP

java.sql.Types.TIMESTAMP

javal.sql.Timestamp

oracle.sql.TIMESTAMP

 

2.0标准的JDBC类型:

  

BLOB

java.sql.Types.BLOB

java.sql.Blob

oracle.sql.BLOB

CLOB

java.sql.Types.CLOB

java.sql.Clob

oracle.sql.CLOB

用户定义的对象

java.sql.Types.STRUCT

java.sql.Struct

oracle.sql.STRUCT

用户定义的参考

java.sql.Types.REF

java.sql.Ref

oracle.sql.REF

用户定义的集合

java.sql.Types.ARRAY

java.sql.Array

oracle.sql.ARRAY

 

Oracle扩展:

  

BFILE

oracle.jdbc.OracleTypes.BFILE

N/A

oracle.sql.BFILE

ROWID

oracle.jdbc.OracleTypes.ROWID

N/A

oracle.sql.ROWID

REF CURSOR

oracle.jdbc.OracleTypes.CURSOR

java.sql.ResultSet

oracle.jdbc.OracleResultSet

TIMESTAMP

oracle.jdbc.OracleTypes.TIMESTAMP

java.sql.Timestamp

oracle.sql.TIMESTAMP

TIMESTAMP WITH TIME ZONE

oracle.jdbc.OracleTypes.TIMESTAMPTZ

java.sql.Timestamp

oracle.sql.TIMESTAMPTZ

TIMESTAMP WITH LOCAL TIME ZONE

oracle.jdbc.OracleTypes.TIMESTAMPLTZ

java.sql.Timestamp

oracle.sql.TIMESTAMPLTZ

数据库中为number类型的字段,在Java类型中对应的有Integer和BigDecimal都会出现; 
经测试发现当数据库为sql server和DB2时,用getObject()取出来时Integer类型,但是Oracle 中取出来就会是Integer或者BigDecimal类型。原因是oracle与java类型对应于number长度有关。 

mssql数据库中datetime、date、timestamp的分别

1) DATETIME

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']

2) DATE

显示格式:YYYY-MM-DD
时间范围:['1000-01-01'到'9999-12-31']

3) TIMESTAMP

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']

 

记自己在mybatis中设置jdbcType的一个坑 (数据库为mysql)

原文链接:https://www.cnblogs.com/DDgougou/p/8578618.html

在时间查询的时候如果使用的是jdbcType=Date,那么比较的时间类型是年月日

<if test="startDate != null and startDate != ''">
       and ea.measureStartTime > #{startDate,jdbcType=Date}
</if>
<if test="endDate != null and endDate != ''">
       and #{endDate,jdbcType=Date} > ea.measureStartTime
</if>

      当不设置jdbcType时,两个if语句在执行比较时,会把参数转换为 “年月日+时分秒”这种。当设置 jdbcType=Date 时,就指定日期只用“年月日”,传递进来的startDate与endDate就变为“2018-03-09 ”,“2018-03-15”。但是设置jdbcType=TIMESTAMP 时,传递进来就是2018-03-09 00:00:00和2018-03-15 23:59:59

 

张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:508
    • 页面总数:20
    • 分类总数:92
    • 标签总数:208
    • 评论总数:61
    • 浏览总数:225323

    | | |
    | |  Z-Blog PHP