MyBatis 所有的 jdbcType类型

本文详细介绍了MyBatis如何处理MySQL中的DATE、DATETIME和TIMESTAMP类型,包括jdbcType的设定对日期操作的影响。当使用java.util.Date作为参数时,MyBatis会自动转换,但指定jdbcType=DATE时会截取时间部分。总结了jdbcType与Java类型的关系,并给出了Oracle数据类型的对应Java类型,强调了在Oracle中处理DATE类型时需要注意的jdbcType设置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis处理MySQL字段类型date与datetime

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:

1、jdbcType=DATE
2、jdbcType=TIMESTAMP

二、JAVA中只有一种日期类型 DateTime

当我们使用java.util.Date作为实体的日期类型时(JAVA没有DateTime这个类,Date类能够同时表示日期和时间),java.util.Date实际上是能够表示MySQL的三种字段类型:

1、date
2、datetime
3、timestamp

三、MyBatis处理方式

而实际将java.util.Date当做参数传递给Mapper的时候
1、假如我们不指定jdbcType,那么这个日期会自动转化会MySQL的timestamp,例子如下:
2、指定jdbcType=TIMESTAMP结果同上。
3、指定jdbcType=DATE,那么MyBatis会将传入参数截取为2018-07-24(Date)

在这里插入图片描述

四、总结

使用java.util.Date作为参数传递给Mapper时,不管MySQL的日期字段类型是date、datetime或者timestamp中的哪一种,MyBatis都能够自动做出类型转换,可以直接使用 =、>、<、>=、<=符号来进行筛选。
唯一的不同点是指定jdbcType=DATE的时候,MyBatis会自动截取掉时间,如果MySQL的日期字段类型是datetime或者timestamp一定不要这么写。
总之不手动指定参数的jdbcType必然没有问题

MyBatis 常用jdbcType数据类型

1 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

2 Mybatis中javaType和jdbcType对应和CRUD例子

<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>

3 Mybatis中javaType和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                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 oracle数据类型和对应的java类型

用mybatis generator生成代码后,执行查询语句时,oracle里的Date类型字段只精确到年月日,后面时分秒都为零。
jdbcType="DATE"时候,存入到数据库中的字段只有年月日!
后来发现是jdbcType问题,改成 jdbcType=“TIMESTAMP” 就可以。(原先默认生成时是jdbcType=“DATE”)

SQL数据类型JDBC类型代码标准的Java类型Oracle扩展的Java类型
-1.0标准的JDBC类型:--
CHARjava.sql.Types.CHARjava.lang.Stringoracle.sql.CHAR
VARCHAR2java.sql.Types.VARCHARjava.lang.Stringoracle.sql.CHAR
LONGjava.sql.Types.LONGVARCHARjava.lang.Stringoracle.sql.CHAR
NUMBERjava.sql.Types.NUMERICjava.math.BigDecimaloracle.sql.NUMBER
NUMBERjava.sql.Types.DECIMALjava.math.BigDecimaloracle.sql.NUMBER
NUMBERjava.sql.Types.BITbooleanoracle.sql.NUMBER
NUMBERjava.sql.Types.TINYINTbyteoracle.sql.NUMBER
NUMBERjava.sql.Types.SMALLINTshortoracle.sql.NUMBER
NUMBERjava.sql.Types.INTEGERintoracle.sql.NUMBER
NUMBERjava.sql.Types.BIGINTlongoracle.sql.NUMBER
NUMBERjava.sql.Types.REALfloatoracle.sql.NUMBER
NUMBERjava.sql.Types.FLOATdoubleoracle.sql.NUMBER
NUMBERjava.sql.Types.DOUBLEdoubleoracle.sql.NUMBER
RAWjava.sql.Types.BINARYbyte[]oracle.sql.RAW
RAWjava.sql.Types.VARBINARYbyte[]oracle.sql.RAW
LONGRAWjava.sql.Types.LONGVARBINARYbyte[]oracle.sql.RAW
DATEjava.sql.Types.DATEjava.sql.Dateoracle.sql.DATE
DATEjava.sql.Types.TIMEjava.sql.Timeoracle.sql.DATE
TIMESTAMPjava.sql.Types.TIMESTAMPjaval.sql.Timestamporacle.sql.TIMESTAMP
-2.0标准的JDBC类型:-
BLOBjava.sql.Types.BLOBjava.sql.Bloboracle.sql.BLOB
CLOBjava.sql.Types.CLOBjava.sql.Cloboracle.sql.CLOB
用户定义的对象java.sql.Types.STRUCTjava.sql.Structoracle.sql.STRUCT
用户定义的参考java.sql.Types.REFjava.sql.Reforacle.sql.REF
用户定义的集合java.sql.Types.ARRAYjava.sql.Arrayoracle.sql.ARRAY
-Oracle扩展:--
BFILEoracle.jdbc.OracleTypes.BFILEN/Aoracle.sql.BFILE
ROWIDoracle.jdbc.OracleTypes.ROWIDN/Aoracle.sql.ROWID
REF CURSORoracle.jdbc.OracleTypes.CURSORjava.sql.ResultSetoracle.jdbc.OracleResultSet
TIMESTAMPoracle.jdbc.OracleTypes.TIMESTAMPjava.sql.Timestamporacle.sql.TIMESTAMP
TIMESTAMP WITH TIME ZONEoracle.jdbc.OracleTypes.TIMESTAMPTZjava.sql.Timestamporacle.sql.TIMESTAMPTZ
TIMESTAMP WITH LOCAL TIME ZONEoracle.jdbc.OracleTypes.TIMESTAMPLTZjava.sql.Timestamporacle.sql.TIMESTAMPLTZ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值