DAO和JDBC的关系?

rra*_*azd 9 database dao hibernate terminology jdbc

我知道Hibernate实现了ORM(对象关系映射),JDBC实现了什么类型的映射?它实现了DAO吗?我不完全理解DAO如何与JDBC相关......?

Bal*_*usC 19

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;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

public class UserDAOJDBC implements UserDAO {

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

Hibernate可能是另一个.

public class UserDAOHibernate implements UserDAO {

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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.
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

它允许您在UserDAO不改变使用DAO的业务代码的情况下切换实现(当然,只有当您正在对接口进行正确编码时).

对于JDBC,你只需要编写很多行来查找/保存/删除所需的信息,而使用Hibernate则只需要几行.无论你是否使用DAO,Hiberenate作为一个ORM都会从你的手中获取那个令人讨厌的JDBC工作.

也可以看看:


Nat*_*hes 5

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

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

JDBC比ORM更底层,它将某些Java类型映射为SQL类型,但仅此而已,它仅接受DDL和DML,执行它,并返回结果集。这取决于您的程序来理解它。