При работе с Spring Data JPA вы можете столкнуться с двумя часто используемыми интерфейсами: CrudRepository и JpaRepository. Оба интерфейса предоставляют возможность взаимодействия с базовой базой данных, но имеют некоторые различия с точки зрения функциональности и использования. В этой статье мы рассмотрим эти различия и приведем примеры кода, иллюстрирующие различные методы, доступные в каждом интерфейсе.
Интерфейс CrudRepository:
Интерфейс CrudRepository — это базовый интерфейс, предоставляемый Spring Data для основных операций CRUD (создание, чтение, обновление, удаление). Он предоставляет общие методы, которые можно использовать для взаимодействия с объектами базы данных. Вот некоторые часто используемые методы:
-
save(entity): сохраняет заданный объект и возвращает сохраненный экземпляр.
public interface CrudRepository<T, ID> { <S extends T> S save(S entity); } -
findById(id): извлекает объект по его идентификатору.
public interface CrudRepository<T, ID> { Optional<T> findById(ID id); } -
findAll(): извлекает все объекты.
public interface CrudRepository<T, ID> { Iterable<T> findAll(); } -
delete(entity): удаляет указанный объект.
public interface CrudRepository<T, ID> { void delete(T entity); } -
deleteById(id): удаляет объект с заданным идентификатором.
public interface CrudRepository<T, ID> { void deleteById(ID id); }
Интерфейс JpaRepository:
Интерфейс JpaRepository расширяет интерфейс CrudRepository и предоставляет дополнительные методы для запроса и управления сущностями. Он основан на базовых операциях CRUD, добавляя более продвинутые возможности запросов. Вот некоторые часто используемые методы:
-
save(entity): сохраняет заданный объект и возвращает сохраненный экземпляр.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { <S extends T> S save(S entity); } -
findById(id): извлекает объект по его идентификатору.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { Optional<T> findById(ID id); } -
findAll(): извлекает все объекты.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { List<T> findAll(); } -
delete(entity): удаляет указанный объект.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { void delete(T entity); } -
deleteById(id): удаляет объект с заданным идентификатором.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { void deleteById(ID id); } -
findBy{PropertyName}(propertyValue): извлекает объекты на основе определенного значения свойства.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { List<T> findByFirstName(String firstName); } -
findBy{PropertyName}In(propertyValues): извлекает объекты, в коллекции которых содержится определенное значение свойства.
public interface JpaRepository<T, ID> extends CrudRepository<T, ID> { List<T> findByAgeIn(List<Integer> ages); }
Подводя итог, можно сказать, что интерфейсы CrudRepository и JpaRepository предоставляют методы для основных операций CRUD. Однако JpaRepository расширяет CrudRepository и добавляет дополнительные возможности запросов, что делает его более мощным для сложного поиска данных. При работе с Spring Data JPA вы можете выбрать подходящий интерфейс исходя из ваших конкретных требований.
Понимая различия между CrudRepository и JpaRepository, вы сможете эффективно использовать их методы для взаимодействия с объектами вашей базы данных в приложении Spring Data JPA.