CrudRepository
Готовые 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 означает новую запись, а установленный идентификатор — уже существующую.
У библиотеки есть и другие стратегии определения нового объекта, поэтому не стоит превращать это правило в универсальное предположение для любой модели.