2011-07-23 10 views
4

私は、JDBC(およびspring-jdbcのjdbcTemplate)を使用して、Java Webアプリケーションで自分のデータベースにアクセスしています。私は多くの異なるクエリを持っています。ここではテーブルの上のテーブルに結合するもの、サブクエリを持つもの、ここでグループを使うテーブルなどがあります。SQL結果をjavaオブジェクトにマップする方法

多くの場合、特定のテーブルを表示するだけの結果が必要ですJSPで生成されるので、便利なqueryForListメソッドを使用して、List<Map<String, Object>>を返します。各行は、列名を値にマップするマップで表されます。 JSPでこれはちょうどいいです、とにかくコンパイル時の型チェックはありません。日食などのプロパティのコード補完はありません。

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

しかし、私が望むのであれば、多くのオブジェクト(セッターとゲッター以外のコードのページ)である可能性のある単一のクエリごとにObjectを記述する必要があります。

その状況を処理するにはどうすればよいでしょうか?それらの文字列を書くだけですか?それとも良い方法がありますか?

答えて

3

...マップでは動作しないように参考になるが、実際のオブジェクトと、 は主にコンパイル時間を持つためのプロパティに本当に は、存在する正しい型を持っているかどうかをチェックし、もちろん、コード補完機能を持っています。あなたは私が怖い、それを作成する必要がありますコンパイラは、あなたのオブジェクトモデルを理解したいので、(Javaで、少なくとも)

IDEは、メンバー変数から取得/設定するメソッドを生成するオプションを提供します。 J2EE Transfer Objectパターンのスタイルでgetterとsetterを必要としないように、純粋にパブリックメンバーが適切かもしれません。ちょうどそこに忍び寄るビジネスロジックを気にして、equals() and hashCode()を忘れないでください。

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

+0

私は、私がオブジェクトよりも書くと思う。私はまともなデザイン構造から離れていくことを恐れていました。しかし、あなたの推論は理にかなっています...ありがとう:-)。 – yankee

0

Brabsterに記載されているように、RowMapperとMappingSQLQueryは、SQL結果セットをオブジェクトに変換するのに役立ちます。しかし、私は、クエリからオブジェクト全体を抽出するとは限らず、(SQL結合を使用して)オブジェクトの組み合わせを抽出することがあるという懸念があることを理解しています。

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

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

+0

まあ、私は他のプロジェクトで "本当の" ORM(Hibernate)を使っていましたが、このプロジェクトでは私はSQLに直接依存しています;-)。もちろん、余分なクラスを追加する必要はありませんが、group by + aggregate関数はどうですか... – yankee

+0

私自身はそれを使用していませんが、[MyBatis](http:// www .mybatis.org /)。 MyBatisデータマッパーを使用するには、自分のオブジェクト、XML、およびSQLを使用する必要があります。MyBatisデータマッパーでは、 SQLとストアドプロシージャの両方を手軽に利用できます。 –

関連する問題