0

私のプロジェクトでは、Spring 3.0 JdbcTemplate を使用して DAO クラスを実装しています。query(...)、update(...) などの便利なメソッドを提供します。これらのメソッドは、クエリにバインドする引数としてオブジェクトを受け入れます。javadoc では、対応する SQL タイプを推測するのは PreparedStatement に任されていると述べられています。したがって、プリミティブまたはラッパーを使用する場合は簡単です。

しかし、私のコードでは、id 表現に特別なクラスを使用しています。たとえば、UserId です。整数値を取得するパブリック メソッド getInt() があります。今、私は使用する必要があります

userId.getInt()

UserId のインスタンスを JdbcTemplate クエリに渡す必要があるたびに。忘れて書いたら

userId

UserId オブジェクトは準備されたステートメントで使用できないため、明らかに SQLException が発生します ( Object 型を対応する SQL 型にマップするルールは次のとおりです)。しかし、このタイプのエラーはコンパイル中に見つけることができず (JdbcTemplate は Object をパラメーターとして受け入れるため)、バグの導入が容易になります。

.getInt() の呼び出しを回避し、 UserId オブジェクトをクエリに渡すだけの方法はありますか?

4

1 に答える 1

1

Object argValue が特別なタイプであるかどうかをチェックする (の)org.springframework.jdbc.core.JdbcTemplate.newArgPreparedStatementSetter(Object[])新しいバージョンでオーバーライドできると思います。org.springframework.jdbc.core.ArgPreparedStatementSetterdoSetValueUserId

于 2011-11-23T17:34:22.847 に答える