我正在尝试为我的应用程序构建一个简单、轻量级的“DAO 层”,它只使用纯 JDBC(没有什么像 Hibernate、TopLink、MyBatis 等那样花哨的东西)。
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 ???;
    }
}
所以我们的想法是有一个doSQL(String)方法BaseDAO来处理所有的样板 JDBC 东西(制作准备好的语句、连接池、用于事务提交的 try-catch 块等)。然后,像这样的子类Animal只需要告诉doSQL执行哪个查询。
问题是,我不确定如何将 JDBCResultSet转换为适当的T泛型类型,在AnimalDAOis Animal. 有任何想法吗?提前致谢!