1. Обзор
CrudRepository – это интерфейс данных Spring для общих операций CRUD в репозитории определенного типа. Он предоставляет несколько методов из коробки для взаимодействия с базой данных.
В этом уроке мы объясним, как и когда использовать метод CrudRepository |/save () .
Чтобы узнать больше о хранилищах данных Spring, взгляните на нашу статью , которая сравнивает CrudRepository с другими интерфейсами репозиториев фреймворка.
Дальнейшее чтение:
Весенние данные JPA @Query
Spring Data JPA – Производные методы удаления
2. Зависимости
Нам придется добавить Spring Data и H2 зависимости от базы данных в ваш pom.xml файл:
org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime
3. Пример применения
Давайте сначала создадим нашу весеннюю сущность данных под названием Merchandise Entity . Этот класс будет определять типы данных, которые будут сохраняться в базе данных при вызове метода save() :
@Entity public class MerchandiseEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private double price; private String brand; public MerchandiseEntity() { } public MerchandiseEntity(String brand, double price) { this.brand = brand; this.price = price; } }
Далее, давайте создадим интерфейс CrudRepository для работы с объектом Merchandise :
@Repository public interface InventoryRepository extends CrudRepository{ }
Здесь мы указываем класс сущности и класс идентификатора сущности, Товарная сущность и Длинная . Когда экземпляр этого репозитория будет создан, базовая логика будет автоматически создана для работы с нашим классом MerchandiseEntity .
Таким образом, с очень небольшим количеством кода мы уже готовы начать использовать метод save () .
4. CrudRepository save() для добавления нового экземпляра
Давайте создадим новый экземпляр Merchandise Entity и сохраним его в базе данных с помощью репозитория Inventory :
InventoryRepository repo = context .getBean(InventoryRepository.class); MerchandiseEntity pants = new MerchandiseEntity( "Pair of Pants", BigDecimal.ONE); pants = repo.save(pants);
При выполнении этого действия будет создана новая запись в таблице базы данных для объекта Товар . Обратите внимание, что мы никогда не указывали id . Экземпляр изначально создается со значением null для его id , и когда мы вызываем метод save () , автоматически генерируется id .
Метод save() возвращает сохраненную сущность, включая обновленное поле id .
5. CrudRepository save() для обновления экземпляра
Мы можем использовать тот же метод save () для обновления существующей записи в нашей базе данных . Предположим, мы сохранили экземпляр Merchandise Entity с определенным названием:
MerchandiseEntity pants = new MerchandiseEntity( "Pair of Pants", 34.99); pants = repo.save(pants);
Но позже мы обнаружили, что хотим обновить цену товара. Затем мы могли бы просто получить сущность из базы данных, внести изменения и использовать метод save () , как и раньше.
Предполагая, что мы знаем id элемента ( ), мы можем использовать CrudRepository метод findById , чтобы получить нашу сущность из базы данных:
MerchandiseEntity pantsInDB = repo.findById(pantsId).get(); pantsInDB.setPrice(44.99); repo.save(pantsInDB);
Здесь мы обновили наш исходный объект с новой ценой и сохранили изменения обратно в базу данных.
6. Заключение
В этой краткой статье мы рассмотрели использование метода CrudRepository save (). Этот метод можно использовать для добавления новой записи в базу данных, а также для обновления существующей.
Как обычно, код статьи находится на GitHub .