Что такое репозиторий в Spring Data JPA и как его реализовать?

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

Ответ

Репозиторий — это слой абстракции над доступом к данным, который инкапсулирует логику работы с хранилищем.

Реализация с помощью Spring Data JPA:

  1. Базовый интерфейс: Наследуйтесь от JpaRepository<Entity, ID> или CrudRepository<Entity, ID>.

    public interface UserRepository extends JpaRepository<User, Long> {
    }

    Это автоматически дает методы save(), findById(), findAll(), deleteById().

  2. Декларативные запросы: Spring Data может генерировать запросы из имени метода.

    List<User> findByLastNameAndAgeGreaterThan(String lastName, int age);
    Optional<User> findByEmail(String email);
  3. Кастомные запросы с @Query: Для сложной логики используйте JPQL или нативный SQL.

    @Query("SELECT u FROM User u WHERE u.active = true AND u.age >= :minAge")
    List<User> findActiveUsersOlderThan(@Param("minAge") int minAge);

Ключевые возможности:

  • Пагинация и сортировка: Page<User> findAll(Pageable pageable);
  • Проекции: Возврат части данных (DTO) для оптимизации.
  • Спецификации (Specifications): Динамическое построение предикатов для сложных фильтров.
  • Аудирование: Автоматическое заполнение полей @CreatedDate, @LastModifiedBy.