一尘不染

DAO和JDBC有关系吗?

hibernate

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


阅读 665

收藏
2020-06-20

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

    // ...
}

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

对于JDBC,您只需要写很多行来查找/保存/删除所需的信息,而使用Hibernate则只需几行。不管您是否正在使用DAO,作为一个ORM进行hibernate都完全可以从您的手中接管到讨厌的JDBC工作。

2020-06-20