mybatis 關於時間的問題與技巧


oracle:
    此執行是在oracle下!
關於日期和時間的問題,date只有日期   timestamp 帶有時分秒
一  #號取值
    1.date
        insert into table (column1) values ( #{aa,jdbcType=DATE})
 
    語句執行的sql:
        insert into table (column1)  values ( to_date('08/27/2015 20:20:20', 'mm/dd/yyyy hh24:mi:ss'))
 
    實際插入到數據庫的結果:
 
    2015/08/27
  --只有日期! 沒有時間
 
** PS: 如果 aa取值時是null 或 "" 則插入到數據庫里的為 null 
 
    2.timestamp
 
        insert into table (column1) values ( #{aa,jdbcType=TIMESTAMP})
 
語句執行的sql:
 
       insert into table (column1)  values ( to_ timestamp('08/27/2015 20:20:20.000', 'mm/dd/yyyy hh24:mi:ss.ff3'))
 
實際插入到數據庫的結果:
 
2015/08/27 20:20:20
  --帶有時分秒的
 
 
二  直接用to_date() / to_timestamp()函數
    前提:這兩個函數不能用於java里的Date類型,只能用於String類型,即aa 的數據類型只能是String
    mybatis在處理to_date函數時(to_timestamp()同理) 
        #{aa} 沒有指定jdbctype, 則根據java數據類型給出一個jdbctype,  但如果 aa為null 或 "" 則出報錯
        #{aa,jdbcType=DATE} ,指定jdbctype后,會轉換為相應的jdbctype,但如果類型不匹配,則報錯. 如果 aa為null 或 ""  則aa 取值為null
        
     PS: java.util.Date aa  mybatis默認給出的jdbctype=TIMESTAMP  即:#{aa} 等價於 #{aa,jdbcType=TIMESTAMP}
 
    1. to_date()
    
    sql1:      insert into table (column1) values (to_date( #{aa},'YYYY-MM-DD'))
    sql2:    insert into table (column1) values (to_date( #{aa},'YYYY-MM-DD hh24:mi:ss '))
 
    執行的sql語句:
    sql1:    insert into table (column1) values (to_date('2015-09-08 20:20:20' ,'YYYY-MM-DD'))
    sql2:     insert into table (column1) values (to_date('2015-09-08 20:20:20' ,'YYYY-MM-DD hh24:mi:ss '))
 
    執行結果:
    sql1:    報錯:   日期格式圖片在轉換整個輸入字符串之前結束    轉換類型不匹配
    sql2:    column1 : 2015-09-08 20:20:20
 
    2. to_timestamp()
    sql3:      insert into table (column1) values (to_timestamp( #{aa},'YYYY-MM-DD'))
    sql4:    insert into table (column1) values (to_timestamp( #{aa},'YYYY-MM-DD hh24:mi:ss '))
 
    執行的sql語句:
    sql3:    insert into table (column1) values (to_timestamp('2015-09-08 20:20:20' ,'YYYY-MM-DD'))
    sql4:     insert into table (column1) values (to_timestamp('2015-09-08 20:20:20' ,'YYYY-MM-DD hh24:mi:ss '))
 
    執行結果:
    sql3:    報錯:   日期格式圖片在轉換整個輸入字符串之前結束    轉換類型不匹配
    sql4:    column1 :   08-9月 -15 08.20.20.000000000 下午    //timestamp 帶有更多的時間信息
 
三  直接取值
    沒有jdbctype  沒有to_date函數  column1的類型為date
     sql5:      insert into table (column1) values ( #{aa})    //aa的java 數據類型為String 
    sql6:      insert into table (column1) values ( #{aa})    //aa的java 數據類型為 java.util.Date
    執行的sql語句:
    sql5:    insert into table (column1) values ('2015-09-08 20:20:20')
   sql6:    insert into table (column1) values (to_timestamp('09/08/2015 15:14:38.000' ,' mm/dd/yyyy hh24:mi:ss.ff3 '))
    執行結果:
    sql5:    報錯:   文字與格式字符串不匹配     轉換類型不匹配
    sql4:    column1 :   2015/8/27 20:20:20   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM