Какую роль выполняет Repository в Spring Data?

«Какую роль выполняет Repository в Spring Data?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Repository в Spring Data — это абстракция над слоем доступа к данным (DAL), которая инкапсулирует логику работы с хранилищем (чаще всего БД) и минимизирует шаблонный код.

Ключевые задачи:

  1. Предоставление готовых CRUD-операций через наследование интерфейсов (JpaRepository, CrudRepository).
  2. Декларативное создание запросов по именам методов или аннотации @Query.
  3. Упрощение интеграции с пагинацией, сортировкой и транзакциями.

Базовый пример:

// 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 стандартизирует доступ к данным, повышая продуктивность и поддерживаемость кода.