Репозитории
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-го слоя).
• иерархию `Repository → CrudRepository → JpaRepository` и как работает пагинация (если дошёл до 2-го слоя).