【问题标题】:DAO and JDBC relation?DAO 和 JDBC 的关系?
【发布时间】:2011-10-27 13:56:30
【问题描述】:

我知道Hibernate实现了ORM(Object Relational Mapping),那么JDBC实现的是什么类型的映射呢?它实现了DAO吗?我不完全了解 DAO 如何/是否与 JDBC 相关...?

【问题讨论】:

    标签: database hibernate jdbc terminology dao


    【解决方案1】:

    DAO 不是映射。 DAO 代表数据访问对象。它看起来像这样:

    public interface UserDAO {
    
        public User find(Long id) throws DAOException;
    
        public void save(User user) throws DAOException;
    
        public void delete(User user) throws DAOException;
    
        // ...
    }
    

    对于 DAO,JDBC 只是一个实现细节。

    public class UserDAOJDBC implements UserDAO {
    
        public User find(Long id) throws DAOException {
            // Write JDBC code here to return User by id.
        }
    
        // ...
    }
    

    Hibernate 可以是另一个。

    public class UserDAOHibernate implements UserDAO {
    
        public User find(Long id) throws DAOException {
            // Write Hibernate code here to return User by id.
        }
    
        // ...
    }
    

    JPA 可能是另一个(如果您将现有的遗留应用程序迁移到 JPA;对于新应用程序,这会有点奇怪,因为 JPA 本身实际上就是 DAO,例如Hibernate 和 EclipseLink 作为可用的实现)。

    public class UserDAOJPA implements UserDAO {
    
        public User find(Long id) throws DAOException {
            // Write JPA code here to return User by id.
        }
    
        // ...
    }
    

    它允许您在不更改使用 DAO 的业务代码的情况下切换 UserDAO 实现(当然,前提是您正确地针对接口进行编码)。

    对于 JDBC,您只需要编写很多行来查找/保存/删除所需的信息,而使用 Hibernate 只需几行。作为 ORM 的 Hiberenate 完全可以从您手中接过讨厌的 JDBC 工作,无论您是否使用 DAO。

    另见:

    【讨论】:

      【解决方案2】:

      DAO 是访问数据的抽象,其思想是将数据访问的技术细节与应用程序的其余部分分开。它可以应用于任何类型的数据。

      JDBC 是一种使用 Java 访问关系数据库的 API。

      JDBC 比 ORM 更底层,它将一些 Java 类型映射到 SQL 类型,但仅此而已,它只需要 DDL 和 DML,执行它并返回结果集。由你的程序来理解它。

      【讨论】:

        猜你喜欢
        • 2018-01-07
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        • 2016-12-16
        • 1970-01-01
        相关资源
        最近更新 更多