DAO和JDBC的关系?

时间:2011-08-15 20:30:35

标签: database hibernate jdbc terminology dao

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

2 个答案:

答案 0 :(得分:18)

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只需几行。无论你是否使用DAO,Hiberenate作为一个ORM都会从你的手中完成那个令人讨厌的JDBC工作。

另见:

答案 1 :(得分:4)

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

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

JDBC比ORM更低级,它将一些Java类型映射到SQL类型但不多于它,它只需要DDL和DML,执行它并返回结果集。你的程序可以理解它。