2

Spring3JdbcTemplateを使用して日付情報を書き込もうとしています。私は次のようなものを持っています:

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

日付がjava.util.Dateの場合、これは問題ありませんが、DateMidnightを使用すると、これは爆発します。もちろん、代わりに次のことを行うことができます。

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

しかし、これを行うのを忘れがちです。JdbcTemplateがDateMidnight(またはDateTime)を取得するたびに、保存する前にそれをDateに変換する必要があることをSpring(3)に伝える方法はありますか?変換サービスAPIについて読みましたが、コード例から、SpringMVCでの変換にのみ適用されることがわかりました。

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処理する方法を知っているレイヤーを作成してから、常にに話しかけるコードを作成してください。DateMidnightDAO

を使用するいくつかのチュートリアルがJdbcTemplateありますDAO-それは私がここにそれを書くのはばかげているのに十分長いですが、これらはかなり良いです。

于 2012-11-29T19:40:25.850 に答える