Ответ
Repository в Spring Data — это абстракция над слоем доступа к данным (DAL), которая инкапсулирует логику работы с хранилищем (чаще всего БД) и минимизирует шаблонный код.
Ключевые задачи:
- Предоставление готовых CRUD-операций через наследование интерфейсов (
JpaRepository,CrudRepository). - Декларативное создание запросов по именам методов или аннотации
@Query. - Упрощение интеграции с пагинацией, сортировкой и транзакциями.
Базовый пример:
// 1. Определяем сущность
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String email;
// getters/setters
}
// 2. Создаем репозиторий
public interface UserRepository extends JpaRepository<User, Long> {
// Автоматически реализуемый запрос по имени метода
List<User> findByEmail(String email);
// Кастомный запрос с JPQL
@Query("SELECT u FROM User u WHERE u.email LIKE %:domain")
List<User> findByEmailDomain(@Param("domain") String domain);
}
// 3. Используем в сервисе
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUserByEmail(String email) {
return userRepository.findByEmail(email).stream().findFirst().orElse(null);
}
}
Преимущества:
- Сокращение кода: Не нужно писать стандартные SQL-запросы и DAO-реализации.
- Безопасность типов: Запросы строятся на основе модели, что снижает риск ошибок.
- Простое тестирование: Легко подменить реализацию моком.
Итог: Repository паттерн в Spring Data стандартизирует доступ к данным, повышая продуктивность и поддерживаемость кода.