Отношения DAO и JDBC?

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

2 ответов


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

Читайте также:


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

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

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