Ответ 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 или нет.