純粋な JDBC (Hibernate、TopLink、MyBatis などの派手なものはありません) のみを使用するアプリ用のシンプルで軽量な「DAO レイヤー」を構築しようとしています。
public class AnimalDAO extends BaseDAO<Animal> {
private AnimalType type;
private String name;
public void insertAnimal(Animal animal) {
StingBuilder sql = new StringBuilder();
sql.append("INSERT INTO animals (");
sql.append("animal_type_id, animal_name ) VALUES (");
sql.append(animal.getType().getId());
sql.append(animal.getName());
sql.append(" )");
doSQL(sql.toString());
}
}
public class BaseDAO<T> {
private Long id;
protected T doSQL(String sql) {
// Typical JDBC code to hit a database with the "sql" query and return a ResultSet.
ResultSet result = queryDatabase(sql);
// Now, how do I turn "result" into type T such that, in the case of
// AnimalDAO#insertAnimal(Animal), result gets converted into an Animal?
return ???;
}
}
したがって、JDBC のすべての定型処理 (準備済みステートメントの作成、接続プーリング、トランザクション コミット用の try-catch ブロックなど) を処理するdoSQL(String)
メソッドを に含めることが考えられます。BaseDAO
次に、のようなサブクラスは、実行するクエリを指定するAnimal
必要があります。doSQL
ResultSet
問題は、JDBCを適切なT
ジェネリック型 ( is の場合) に変換する方法がわからないことAnimalDAO
ですAnimal
。何か案は?前もって感謝します!