5

私はJdbcTemplateの見た目のシンプルさが好きですが、それがどのように機能するかについて少し混乱しています。各操作(query()またはupdate())は、データソースから接続をフェッチして閉じているようです。

美しいですが、同じ接続内で複数のSQLクエリをどのように実行しますか?

複数の操作を順番に実行したい場合(たとえば、SELECT、INSERT、コミット)、またはネストされたクエリを実行したい場合があります(SELECTを実行してから、各行の結果に基づいて2番目のSELECTを実行します)。

JdbcTemplateを使用してこれを行うにはどうすればよいですか。適切なクラスを使用していますか?

4

2 に答える 2

8

同じ接続内で複数の SQL クエリを実行するにはどうすればよいですか?

ここでの正解は「トランザクションを使用する」です。トランザクションを開始してから で複数の操作を実行するとJdbcTemplate、それらの操作のそれぞれがトランザクションの範囲内になるため、同じ接続を使用することが保証されます。

トランザクションに関与したくない場合、別の方法として、 のインスタンスを提供するJdbcTemplateなどのより原始的な操作を使用して、選択した任意の操作を実行できます。もちろん、これを行うと、実際の操作で の助けが得られません。execute(ConnectionCallback action)ConnectionCallbackConnectionJdbcTemplate

Spring ではトランザクションは非常に簡単です。トランザクションの使用を検討する必要があります (上記のリンクを参照)。

于 2010-04-02T07:04:17.317 に答える
5

私はあなたがトランザクションを望んでいると思いますか?もしそうなら、Spring、JdbcTemplate、および Transactions を見てください。

余談ですが、 Ibatisをご覧になることをお勧めします。Spring JDBC は便利そうに見えますが、大きな問題が 1 つあります。オブジェクトへの結果セットのデフォルトのマッピングは Spring クラスを使用します。これは、大きな結果セットを処理する場合、実際には非常に遅くなります。これらのクエリに対して独自の行マッパーを作成することでこれを回避できますが、個人的にはこの種のボイラープレートを作成したくありません。

違いの例を挙げると、Spring リフレクション ベースの行マッパーでは 1 つのクエリに 50 秒かかりましたが、ハンド コーディングされた行マッパーでは 2 秒かかりました。

また、Spring JDBC はインライン SQL を使用します。Java では、これはかなり見苦しいものです。Java には (厄介なことに) 適切な複数行の文字列形式がないからです。

于 2010-04-01T23:02:24.910 に答える