2

我正在尝试使用 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 中的转换。

4

2 回答 2

3

据我了解,您需要在那里覆盖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);
}
于 2012-11-29T19:32:22.717 回答
0

此类问题的最佳解决方案是创建您自己的数据访问对象 ( DAO) 层。永远不要让您的代码JdbcTemplate直接与之对话,编写一个知道如何处理 a DateMidnight(以及您需要的任何其他内容)的层,然后始终编写您的代码与DAO.

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

于 2012-11-29T19:40:25.850 回答