Я знаю, что Hibernate реализует ORM (реляционное сопоставление объектов), какой тип отображения реализует JDBC? Осуществляет ли он DAO? Я не совсем понимаю, как/если DAO связано с JDBC...?
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, выполняет его и возвращает результирующие наборы. Это для вашей программы, чтобы понять это.