我使用公共(public) 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 对象保存到数据库(MySQL 日期时间类型)中时,我使用了 MyBatis 处理程序的实现:
XMLGregorianCalendarDateTypeHandler implements TypeHandler<XMLGregorianCalendar>
...
我在 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" />
不确定这是错误还是功能。
关于java - 是否可以直接从 MyBATIS 获取 XMLGregorianCalendar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978272/