【发布时间】:2013-10-24 22:45:35
【问题描述】:
我正在尝试为我的应用构建一个简单、轻量级的“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 ???;
}
}
所以我们的想法是在BaseDAO 中有一个doSQL(String) 方法来处理所有样板的JDBC 内容(制作准备好的语句、连接池、用于事务提交的try-catch 块等)。然后,像Animal 这样的子类只需要告诉doSQL 执行哪个查询。
问题是,我不确定如何将 JDBC ResultSet 转换为适当的 T 泛型类型,在 AnimalDAO 的情况下是 Animal。有任何想法吗?提前致谢!
【问题讨论】:
标签: java generics jdbc data-access-layer resultset