淺談MyBatis所有的jdbcType類型
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當做參數(shù)傳遞給Mapper的時候
1、假如我們不指定jdbcType,那么這個日期會自動轉(zhuǎn)化會MySQL的timestamp,例子如下:
2、指定jdbcType=TIMESTAMP結(jié)果同上。
3、指定jdbcType=DATE,那么MyBatis會將傳入?yún)?shù)截取為2018-07-24(Date)

四、總結(jié)
使用java.util.Date作為參數(shù)傳遞給Mapper時,不管MySQL的日期字段類型是date、datetime或者timestamp中的哪一種,MyBatis都能夠自動做出類型轉(zhuǎn)換,可以直接使用 =、>、<、>=、<=符號來進行篩選。 唯一的不同點是指定jdbcType=DATE的時候,MyBatis會自動截取掉時間,如果MySQL的日期字段類型是datetime或者timestamp一定不要這么寫。 總之不手動指定參數(shù)的jdbcType必然沒有問題
MyBatis 常用jdbcType數(shù)據(jù)類型
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對應(yīng)和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對應(yīng)關(guān)系
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數(shù)據(jù)類型和對應(yīng)的java類型
用mybatis generator生成代碼后,執(zhí)行查詢語句時,oracle里的Date類型字段只精確到年月日,后面時分秒都為零。 jdbcType=”DATE”時候,存入到數(shù)據(jù)庫中的字段只有年月日! 后來發(fā)現(xiàn)是jdbcType問題,改成 jdbcType=“TIMESTAMP” 就可以。(原先默認生成時是jdbcType=“DATE”)
SQL數(shù)據(jù)類型 | 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 |
到此這篇關(guān)于淺談MyBatis所有的jdbcType類型的文章就介紹到這了,更多相關(guān)MyBatis jdbcType類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用lombok注解導(dǎo)致mybatis-plus TypeHandler失效的解決
這篇文章主要介紹了使用lombok注解導(dǎo)致mybatis-plus TypeHandler失效的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
SpringBoot應(yīng)用自定義logback日志詳解
默認情況下,SpringBoot內(nèi)部使用logback作為系統(tǒng)日志實現(xiàn)的框架,將日志輸出到控制臺,不會寫到日志文件。本篇文章主要講解下如何自定義logabck.xml以及對logback文件中配置做一個詳解,需要的可以參考一下2022-10-10
利用Jackson實現(xiàn)數(shù)據(jù)脫敏的示例詳解
在我們的企業(yè)項目中,為了保護用戶隱私,數(shù)據(jù)脫敏成了必不可少的操作,那么我們怎么優(yōu)雅的利用Jackson實現(xiàn)數(shù)據(jù)脫敏呢,本文就來和大家詳細聊聊,希望對大家有所幫助2023-05-05
一小時迅速入門Mybatis之Prepared Statement與符號的使用
這篇文章主要介紹了一小時迅速入門Mybatis之Prepared Statement與符號的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

