DAO и JDBC?

Я знаю, что Hibernate реализует ORM (реляционное сопоставление объектов), какой тип отображения реализует JDBC? Осуществляет ли он DAO? Я не совсем понимаю, как/если DAO связано с JDBC...?

Ответ 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.
    }

    // ...
}

Спящий режим может быть другим.

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 - это всего лишь несколько строк. Hiberenate как ORM берет именно ту мерзкую работу JDBC из ваших рук, независимо от того, используете ли вы DAO или нет.

См. также:

Ответ 2

DAO - это абстракция для доступа к данным, идея состоит в том, чтобы отделить технические детали доступа к данным от остальной части приложения. Он может применяться к любым данным.

JDBC - это API для доступа к реляционным базам данных с использованием Java.

JDBC более низкоуровневый, чем ORM, он отображает некоторые типы Java в типы SQL, но не более того, он просто принимает DDL и DML, выполняет его и возвращает результирующие наборы. Это для вашей программы, чтобы понять это.