4

JDBC(およびspring-jdbcのjdbcTemplate)を使用して、JavaWebアプリケーションのデータベースにアクセスしています。さまざまなクエリがあります。その中には、あそこのテーブルに参加するもの、サブクエリを使用するもの、ここでgroupbyを使用するものなどがあります。

List<Map<String, Object>>多くの場合、JSPによって生成された特定のテーブルを表示するためだけに結果が必要になるため、列名を値にマップするマップで表される各行のリストを返す便利なqueryForListメソッドを使用できます。JSPでは、これは問題ありません。コンパイル時の型チェックはなく、Eclipseなどによるプロパティのコード補完もありません。

しかし、クエリ結果を処理するJavaコードがある場合があります。マップではなく、実際のオブジェクトでは、主にコンパイル時にプロパティが実際に存在するかどうかをチェックし、正しいタイプを持ち、もちろんコードを補完します。

しかし、必要に応じて、多くのオブジェクト(セッターとゲッターのみを含むコードのページ)である可能性のあるすべてのクエリに対してオブジェクトを作成する必要があります。

その状況に対処するための最良の方法は何でしょうか?それらのくそったれのオブジェクトを書くだけですか?それとももっと良い方法はありますか?

4

2 に答える 2

3

...マップではなく実際のオブジェクトを使用すると、主にプロパティが実際に存在するかどうか、正しいタイプを持っているかどうか、そしてもちろんコード補完があるかどうかをコンパイル時にチェックするために役立ちます。

コンパイラにオブジェクト モデルを理解してもらいたいので、(少なくとも Java では) オブジェクト モデルを作成する必要があります。

適切な IDE は、メンバー変数から get/set メソッドを生成するオプションを提供します。これにより、時間を節約できます。ビジネス ロジックではなく、JDBC クエリにセマンティクスを適用するためだけにオブジェクト モデルが存在する場合は、おそらくパブリック メンバーが適切であり、J2EE転送オブジェクトパターンのスタイルでのゲッターとセッターの必要性を回避します。そこに忍び寄るビジネスロジックに気をつけて、 equals() と hashCode() を忘れないでください。

ただし、Spring JDBC では、 RowMapperMappingSqlQueryなど、オブジェクトとの間のマッピングを行うためのヘルプがいくつかあります。労力を節約するために、 Spring ORMなどのオブジェクト リレーショナル マッピング フレームワークを確認することもできます。これらのアプローチは、SQL との間の変換コードを記述し、トランザクションとデータベース スキーマを管理する時間を節約できると思いますが、オブジェクト モデルを作成する必要があります。

于 2011-07-23T10:54:29.103 に答える
1

Brabster が述べたように、RowMapper と MappingSQLQuery は、SQL の結果セットをオブジェクトに変換するのに役立ちます。しかし、あなたの懸念は、常にクエリからオブジェクト全体を抽出するとは限らず、時にはオブジェクトの組み合わせを (SQL 結合を行うことによって) 抽出することだと理解しています。

私の理解が正しければ、基本的に、これらのオブジェクトの組み合わせごとにクラスを作成する必要があるかどうか疑問に思っていますか?

簡単な答えはノーです。結合クエリの種類ごとにカスタム クラスを作成する必要はありませんが、適切な ORM がない場合は、結合の種類ごとに RowMappers を提供する必要があります (ORM の M はマッピングを表すことに注意してください)。 )。Spring の JDBC フレームワークは ORM ではないため、クエリごとにマッピング ロジックを提供するよう求められます。これが難しすぎるように聞こえる場合は、ORM の世界へようこそ :)

于 2011-07-23T19:40:43.287 に答える