1

私は Employee テーブルとそのための Entity クラスを持っています。
私のタスクは、結果セット内の従業員テーブルのデータ (タイプ scrollable ) を 2 回必要と
するようなものです。 ->

1: エンティティ クラスのインスタンスを作成し、結果セットを初めて反復処理するときに List に格納します。
または
2: 最初の繰り返しの後、結果セットの first() メソッドを呼び出して最初の行に戻り、データを 2 回目に使用します。

どのオプションが時間とリソースの消費を抑えますか。
より良い提案があれば、提供してください。
ありがとう。

4

3 に答える 3

1

これが非常に大きな結果セットに関するものでない限り、次の理由により、 JDBC 全体ResultSetをメモリに消費し、java.util.Listではなく で操作する方がおそらくはるかに優れています。java.sql.ResultSet

  1. リストは開発者にとってより使いやすくなっています
  2. データベース リソースはすぐに解放できます (エラーが発生しにくくなります)。
  3. Java で 1000 行のメモリが不足することはおそらくないでしょう。
  4. ResultSetさまざまな JDBC ドライバーがこの機能を微妙に異なる方法で実装しているため、 scrollable で操作するときに多くの間違いを犯す可能性があります。

JDBC 結果セットを使用するためのツールを使用できます。たとえば、Apache DbUtils :

QueryRunner run = new QueryRunner(dataSource);
ResultSetHandler<List<Person>> h
  = new BeanListHandler<Person>(Person.class);
List<Person> persons = run.query("SELECT * FROM Person", h);

jOOQ (3.0 構文):

List<Person> list =
DSL.using(connection, sqldialect)
   .fetch("SELECT * FROM Person");
   .into(Person.class);

春の JdbcTemplate :

JdbcTemplate template = // ...
List result = template.query("SELECT * FROM Person", rowMapper);
于 2012-04-05T08:01:58.307 に答える
0

たぶんMap、主キーで従業員のを使用することは役に立ちますか?

リストを複数回繰り返す必要があると思う理由を説明すると、そもそもその2番目の相互作用を取り除くためのより良いアルゴリズムがあるかどうかがわかります。

于 2012-04-05T08:11:37.907 に答える
0

データベースから取得したデータをキャッシュします。ドライバーが独自のレベルでキャッシュを提供している場合でも、常にポーリングするよりも優れています。不要になった場合はいつでも撤回できます。

于 2012-04-05T08:03:43.633 に答える