Карта / Spring Data / Репозитории

Репозитории

Spring Data — слой поверх JPA/Hibernate (см. тему «Repository»), который убирает почти весь шаблонный код доступа к данным. Объявил интерфейс — реализацию Spring создаёт сам, в рантайме.

interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByCity(String city);          // SQL генерируется по имени метода
    Optional<User> findByEmail(String email);
}
@Service
class UserService {
    private final UserRepository repo;
    UserService(UserRepository repo) { this.repo = repo; }

    User register(User user) {
        return repo.save(user);    // INSERT/UPDATE — Spring сам решит, по наличию id
    }
}
Копнуть глубже

Иерархия интерфейсов Spring Data:

ИнтерфейсЧто добавляет
Repository<T, ID>базовый маркерный интерфейс, без методов
CrudRepository<T, ID>save, findById, findAll, delete
PagingAndSortingRepository<T, ID>+ пагинация и сортировка
JpaRepository<T, ID>+ специфичные для JPA методы (батч-операции и т.д.)

Пагинация “из коробки”:

Page<User> page = repo.findAll(PageRequest.of(0, 20, Sort.by("name")));
// страница 0, по 20 записей, отсортировано по имени

Page сразу содержит и сами данные, и метаинформацию (общее число страниц, есть ли следующая) — не нужно вручную считать OFFSET/LIMIT в SQL.

🎤 Закрыл тему, если можешь объяснить:
• что даёт интерфейс репозитория без написания кода;
• иерархию `Repository → CrudRepository → JpaRepository` и как работает пагинация (если дошёл до 2-го слоя).