Короткий ответ
Spring Data JPA — модуль Spring Framework, работающий поверх спецификации JPA (внутри по умолчанию Hibernate): достаточно объявить интерфейс-репозиторий, и Spring Data сам предоставит его реализацию с готовыми CRUD-операциями — без написания SQL и DAO-классов.
Как это работает подробнее
Центральный интерфейс — JpaRepository, расширяющий CrudRepository и PagingAndSortingRepository. Особенность Spring Data JPA — производные методы запросов (derived query methods): по имени метода, то есть по префиксам findBy, countBy, existsBy, deleteBy и именам полей сущности, Spring Data парсит имя и генерирует нужный JPQL или SQL-запрос.
- Готовые методы:
save(),findById(),findAll(),deleteById(),flush(), а также пагинация черезPageableи сортировка черезSort. - Derived-метод:
findByName(String name)превращается в поиск по полюname, аfindByDepartmentNameстроит запрос через связанную сущность. - @Query: для сложных запросов запрос задаётся вручную на JPQL или нативном SQL при
nativeQuery = true, параметры связываются через@Param. - Дополнительно: поддерживаются пагинация (
Page findAll(Pageable)), сортировка и batch-операцияsaveAll().
Пример кода
UserRepository.java
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
@Query("SELECT u FROM User u WHERE u.email = :email")
Optional<User> findByEmail(@Param("email") String email);
}