簡體   English   中英

是否可以直接從MyBATIS獲取XMLGregorianCalendar?

[英]Is it possible to get XMLGregorianCalendar directly from MyBATIS?

我使用公共StackOverflow轉儲,並將所有內容存儲在MySQL中。 現在,我想使用Java和MyBATIS進行一些分析。 對於其中的一些,我需要為用戶或特定問題等提取時間序列。為此,讓我們說帖子及其時間戳,我有一個MyBatis查詢:

 <select id="GetAllPostsTimeStamps" resultType="java.util.Date">
     SELECT creationDate from posts
 </select>

它將時間戳數據傳遞給MyBatis ResultHandler,在這里我進行此轉換:

@Override
public void handleResult(ResultContext context) {
   TimeZone tz = TimeZone.getTimeZone("UTC");
   TimeZone.setDefault(tz);
   Date tstamp = (Date) context.getResultObject();
   XMLGregorianCalendar xmlTstam = Tstamp.makeTimestamp(tstamp.getTime());
   ...etc...
}

我真的需要使用XMLGregorianCalendar因為我所有的下游邏輯都依賴於這種類型。

是否可以告訴MyBatis使用其處理程序功能在內部將SQL日期時間轉換為XMLGregorianCalendar(即,我將只對處理程序進行一次編碼),以便每次需要時都可以從中獲得適當的時間戳?

編輯以增加清晰度。

因此,當我將帶有XMLGregorianCalendar字段的Java對象保存到DB(MySQL datetime類型)中時,我使用MyBatis處理程序的實現:

XMLGregorianCalendarDateTypeHandler implements TypeHandler<XMLGregorianCalendar>
...

我在INSERT查詢中指定的INSERT如下:

    ..., #{creationDate,
           javaType=javax.xml.datatype.XMLGregorianCalendar,
           jdbcType=TIMESTAMP,                
           typeHandler=...XMLGregorianCalendarTypeHandler},...

有沒有一種方法可以為SELECT類型查詢指定反向轉換處理程序?

我發現了為什么它不起作用,也許會幫助某人:

因此,當我配置同時指定兩種類型的處理程序:JDBC和Java時,這不起作用:

<typeHandler javaType="javax.xml.datatype.XMLGregorianCalendar" 
      jdbcType="TIMESTAMP"
      handler="my.package.XMLGregorianCalendarTimestampTypeHandler" />

但是,如果我僅指定Java類型,它就可以工作。 魔法:

<typeHandler javaType="javax.xml.datatype.XMLGregorianCalendar" 
      handler="my.package.XMLGregorianCalendarTimestampTypeHandler" />

不確定是錯誤還是功能。

我不認識MyBatis,但這有幫助嗎?

DatatypeFactory factory = DatatypeFactory.newInstance();
XMLGregorianCalendar calendar = factory.newXMLGregorianCalendar();
calendar.setMillisecond(tstamp.getTime());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM