5

私はBatchSqlUpdateしばらくの間、クラスをうまく使用しています。declareParameterそれを使用する唯一の煩わしさは、またはsetParameterメソッドを使用してクエリを実行する前に、名前付きパラメーターを登録する必要があることです。これは、パラメータの型も宣言する必要があることを意味します。ただし、Spring は、最初に宣言する必要なく、名前付きパラメーターを入力 (マップまたはオブジェクトの配列)として受け取るNamedParameterJdbcTemplate非常に便利なメソッドを持つクラスも提供します。その上、このクラスは簡単に再利用でき、スレッドセーフであると私は信じています。だから私はこれについていくつか質問があります:batchUpdateSqlParameterSource

  • (複数の) バッチ更新を実行するための推奨される方法は何ですか?
  • この機能が、動作も異なる 2 つの異なるクラスで重複しているのはなぜですか?
  • BatchSqlUpdate宣言されたパラメーターが必要でないのに、なぜ必要なのNamedParameterJdbcTemplateですか?

考えてくれてありがとう!

ジョバンニ

4

1 に答える 1

2

いくつかの調査を行った後、次の結論に達しました。

まず、NamedParameterJdbcTemplateバッチ更新用の名前付きパラメーターを受け入れるのはこのクラスだけであることに気付きました。このメソッドbatchUpdate(String sql,Map[] batchValues)は、これを実現するために Spring 3 で追加されました。

このクラスには、javadoc に記載されているように、特定のステートメント パラメータをすぐに実行するのではなく、キューに追加BatchSqlUpdateするオーバーライドされたupdate(Object... params)メソッドが含まれています。これは、メソッドが呼び出されたとき、またはバッチ サイズが最大値を超えたときにのみ、ステートメントが実行されることを意味します。このクラスは、から継承されたメソッドを含んでいますが、名前付きパラメーターをサポートしていません。この方法では名前付きパラメーターに対して同じマップを再利用できるため、これは残念です。一方、この方法ではマップの配列が必要であり、関連するオーバーヘッド、コードの肥大化、およびバッチ サイズが可変の場合にマップの配列を再利用する際の複雑さが伴います。flush()updateByNamedParam()SqlUpdateNamedParameterJdbcTemplate.batchUpdate()

updateByNamedParam(Map paramMap)オーバーライドされたバージョンのinBatchSqlUpdateが同じように動作するupdate(Object... params)が、名前付きパラメーターのサポートが追加されていると便利だと思います。

于 2013-04-02T14:55:47.650 に答える