我正在尝试为我的应用程序构建一个简单、轻量级的“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
泛型类型,在AnimalDAO
is Animal
. 有任何想法吗?提前致谢!