1

データベースからデータを抽出する小さな Java ライブラリに取り組んでいます。

汎用Java クラスがあるとします。

パブリック クラス MyClass {

   public int valueA;
   public String valueB;
   public Double valueC;

   //getter and setter methods.
}

その後、SQL クエリ文字列を定義し、ジェネリック クラスのクラスを取得しますMyClass

String sql = "Select c.valueA, c.valueB, c.valueC from my_table c";
Class<MyClass> type = MyClass.class;
List<MyClass> results = extractData(sql, type)M   

メソッドextractDataは、次のメソッドのようなものです。

public<T> List<T> extractData(String sql, Class<T> type){
  //1)Do everything that is necessary to retrieve a ResultSet by the sql String.   
  //2)Then, for each row in the ResultSet
  //2.1)Create a new instance of object of type T.
  //2.2)Automatically matches the field name from the query
  //   with the field name of the specified class.
  //2.3) add the object to the list to be returned.
  //3) return the list of results of type T.
}

実際には、可能であれば、ステップ 2.2 をどのように実装できますか?

私はこのアプローチを PHP フレームワークに使用しているので、これは可能だと思います。

4

2 に答える 2

2

必要なのは、結果セットのメタデータ(列の名前を取得するため) と、クラスを分析してフィールドを設定するためのリフレクションです。間に多くのグルー コードを記述することを期待してください (たとえば、各列に使用する getXXX()/datatype を推測する必要があるクラスのフィールド タイプから)。

それほど複雑ではありませんが、少し考える必要があります。多くの潜在的なエッジ ケース (継承など) と、暗黙的な型変換の処理方法 (クラス フィールドと列のデータ型に直接互換性がない場合) があります。

于 2013-04-26T13:29:05.983 に答える