CrudRepository

Базовый Spring
≈ 1 мин чтения

Готовые CRUD-операции

Интерфейс CrudRepository уже содержит основные операции, которые повторяются почти для любой сущности: сохранить объект, найти его, получить все записи, проверить существование и удалить данные. Поэтому для базового CRUD часто не нужно объявлять собственные методы.

Customer saved = repository.save(customer);

Optional<Customer> customer = repository.findById(42L);
boolean exists = repository.existsById(42L);
long total = repository.count();

repository.deleteById(42L);

findById() возвращает Optional, потому что строки с таким идентификатором может не быть. save() возвращает сохранённый объект — это особенно важно, когда база данных генерирует идентификатор при вставке.

Когда save выполняет вставку, а когда обновление

Перед сохранением Spring Data JDBC определяет, считается ли объект новым. Для обычной сущности с генерируемым объектным идентификатором типичный случай прост: id == null означает новую запись, а установленный идентификатор — уже существующую. У библиотеки есть и другие стратегии определения нового объекта, поэтому не стоит превращать это правило в универсальное предположение для любой модели.

save() работает с сущностью как с сохраняемым целым, а не как с «изменившимся полем». Не следует ожидать, что Spring Data JDBC отслеживает изменения объекта между чтением и записью так же, как persistence context ORM.