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

    工做須要使用mybatis generator,另外Oracle和mybatis也沒有作過深刻的瞭解,只是能用會寫業務代碼,不報錯就能夠了。html

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

    在使用Oracle+mybatis作sql查詢時,發現查詢出來的結果只精確到年月日,由於mybatis的orm映射由mybatis generator來作的,因此本身覺得在哪一個地方業務代碼轉換是出了錯,Debug的時候才發現出錯的是sql查詢。sql

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

mybatis jdbcType: DATE ,TIMESTAMP 區別: mybatis

1. mybatis中 jdbcType 時間類型spa

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

jdbcType = TIMESTAMP ,  年月日+ 時分秒orm

2. jdbcType 是否必須:htm

使用時, 沒有加jdbcType 正常, blog

加上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())結果是精確到年月日,至於爲何,後續有時間補充。

相關文章
相關標籤/搜索