java - 是否可以直接从 MyBATIS 获取 XMLGregorianCalendar?

标签 java mybatis

我使用公共(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/

相关文章:

Mybatis 生成器 : How to generate all tables for a specified schema

mysql - 如何在java中生成唯一的序列号?

java - 如何在Gradle项目中使用Mybatis Pagehelper插件?

java - 使用java生成图像条形码并作为url保存到mysql中

java - 如何在 Java 中检索文件名的禁止字符?

java - 将值传递给 Java 中的外部方法

java - 根据 xml 模式生成 Web 表单

java - Eclipse 插件 : Run code right after startup

Java MyBatis Freemarker 动态 SQL

java - 如何在 SQL Provider 中使用带有 Mybatis Annotation 的 IN 子句