java - 将 JDBC ResultSet 转换为泛型类型?

标签 java generics jdbc data-access-layer resultset

我正在尝试为我的应用程序构建一个简单、轻量级的“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/

相关文章:

java - JDBC Prepared Statement 对 session 范围感到困惑

java - 在没有迭代器的情况下同时修改/删除 HashMap 中的条目

java - 将 map 的第一个元素添加到另一个列表的第一个位置,依此类推...将第二个 map 元素添加到列表的第二个位置

c# - 通用转换

java - java 中的突然结果集行为

java - 如何让 Java 方法返回多个值?

java - 使用 Java 字典...使用哈希表?

java - 尽可能快地发送数据包时 Rust 与 Java 中的不同网络行为

java - "? extends E"和 "T extends E"有什么区别?

java - 使用泛型类访问其他类的其他方法