我正在尝试为我的应用程序构建一个简单、轻量级的“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 block 等)。然后,像 Animal
这样的子类只需要告诉 doSQL
要执行哪个查询。
问题是,我不确定如何将 JDBC ResultSet
转换为适当的 T
泛型类型,在 AnimalDAO
的情况下code> 是动物
。有任何想法吗?提前致谢!
最佳答案
是的,我会遵循 Spring JDBC 模板模型并引入 RowMapper界面。让每种类型的对象告诉您如何管理它。
或者,更好的是,只需使用 Spring JDBC 模板。他们写出的代码比你我都好。为了简单起见,很难超越它。
关于java - 将 JDBC ResultSet 转换为泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409868/