让春天写乔达约会时间/日期午夜



我正在尝试使用Spring 3 JdbcTemplate编写日期信息。我有如下内容:

public void foo(DateMidnight date){
    jdbcTemplate().update(sql,date);
}

如果日期是java.util.Date,这很好,但是使用DateMidnight,这就会爆炸。我当然可以改为:

public void foo(DateMidnight date){
    jdbcTemplate().update(sql,date.toDate());
}

但是很容易忘记这样做。有没有办法告诉 Spring (3),每当 JdbcTemplate 获得 DateMidnight(或 DateTime)时,它应该在存储之前将其转换为 Date?我阅读了有关转换服务 API 的信息,但从代码示例中我看到它仅适用于 Spring MVC 中的转换。

据我了解,您需要覆盖JdbcTemplate.newArgPreparedStatementSetter()并在那里实现适当的转换,如下所示:

protected PreparedStatementSetter newArgPreparedStatementSetter(Object[] args) {
    Object[] converted = new Object[args.length];
    for (int i = 0; i < args.length; i++) {
        Object arg = args[i];
        if (arg instanceof DateTime) {
            converted[i] = ((DateTime) arg).toDate();
        } else {
            converted[i] = arg;
        }
    }
    return super.newArgPreparedStatementSetter(converted);
}

对于这样的事情,最好的解决方案是创建自己的数据访问对象(DAO)层。永远不要让你的代码直接与JdbcTemplate对话,编写一个知道如何处理DateMidnight(以及你需要的任何其他东西)的层,然后始终编写代码与DAO对话。

这里有一些使用JdbcTemplateDAO的教程 - 它足够长,对我来说在这里写出来很愚蠢,但这些都很好。

  • 第一条
  • 第二条

最新更新