0

純粋な 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。何か案は?前もって感謝します!

4

2 に答える 2