關於Oracle字段類型Date使用mybatis generator自動生成工具出現的查詢日期只精確到年月日問題


    工作需要使用mybatis generator,另外Oracle和mybatis也沒有做過深入的了解,只是能用會寫業務代碼,不報錯就可以了。

廢話,割------------------------------------------------------------------------------------------------------------------------------------

    在使用Oracle+mybatis做sql查詢時,發現查詢出來的結果只精確到年月日,因為mybatis的orm映射由mybatis generator來做的,所以自己以為在哪個地方業務代碼轉換是出了錯,Debug的時候才發現出錯的是sql查詢。

    其中一點在網上找到了(http://www.soso.io/article/72293.html),文章中提到:

mybatis jdbcType: DATE ,TIMESTAMP 區別: 

1. mybatis中 jdbcType 時間類型

當jdbcType = DATE 時, 只傳入了 年月日

jdbcType = TIMESTAMP ,  年月日+ 時分秒

2. jdbcType 是否必須:

使用時, 沒有加jdbcType 正常, 

加上jdbcType原因(網絡): 當傳入字段值為null,時,需要加入. 否則報錯.

     於是修改了,sqlMap中的所有jdbcType=DATE 為TIMESTAMP,保存編譯運行結果還是精確到年月日。

    翻開舊項目需要差異,發現因為Oracle中的字段類型是Date的緣故,mybatis generator自動生成了幾個個addCriterionForJDBCDate方法,而所有對應Date類型的字段,都使用了該方法,代碼如下:

    

 1         protected void addCriterionForJDBCDate(String condition, Date value, String property) {
 2             if (value == null) {
 3                 throw new RuntimeException("Value for " + property + " cannot be null");
 4             }
 5             addCriterion(condition, new java.sql.Date(value.getTime()), property);
 6         }
 7 
 8         protected void addCriterionForJDBCDate(String condition, List<Date> values, String property) {
 9             if (values == null || values.size() == 0) {
10                 throw new RuntimeException("Value list for " + property + " cannot be null or empty");
11             }
12             List<java.sql.Date> dateList = new ArrayList<java.sql.Date>();
13             Iterator<Date> iter = values.iterator();
14             while (iter.hasNext()) {
15                 dateList.add(new java.sql.Date(iter.next().getTime()));
16             }
17             addCriterion(condition, dateList, property);
18         }
19 
20         protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) {
21             if (value1 == null || value2 == null) {
22                 throw new RuntimeException("Between values for " + property + " cannot be null");
23             }
24             addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property);
25         }

其中Java.sql.Date(value1.getTime())結果是精確到年月日,至於為什么,后續有時間補充。


免責聲明!

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



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