[英]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.