Ответ
DAO (Data Access Object) — это паттерн проектирования, который абстрагирует и инкапсулирует доступ к источнику данных (БД, внешний API). В Spring он реализуется для отделения бизнес-логики от деталей доступа к данным.
Ключевые моменты:
- Цель: Предоставить чистый API для операций CRUD, скрывая специфику JDBC, JPA, Hibernate или других технологий.
- Реализация: Обычно это интерфейс и его реализация, аннотированные как Spring-компоненты (
@Repository). - Преимущества: Упрощает тестирование (можно подменить mock-реализацией), централизует обработку исключений доступа к данным.
Пример интерфейса и реализации:
// Интерфейс DAO
public interface UserDao {
User findById(Long id);
List<User> findAll();
void save(User user);
}
// Реализация с использованием JdbcTemplate
@Repository
public class JdbcUserDao implements UserDao {
private final JdbcTemplate jdbcTemplate;
public JdbcUserDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public User findById(Long id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new UserRowMapper(), id);
}
// ... другие методы
}
Spring аннотация @Repository также автоматически транслирует специфичные исключения доступа к данным в Spring-исключения DataAccessException.