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