Вопрос проверяет понимание того, как Spring взаимодействует с базой данных и какие уровни абстракции используются для этого.
В Spring работа с базой данных обычно организуется через Spring Data и JPA. Разработчик описывает сущности и репозитории, а Spring берет на себя большую часть рутинного кода. Это упрощает CRUD-операции и снижает количество ошибок. Такой подход делает код чище и легче для поддержки.
Spring предлагает несколько уровней абстракции для работы с базой данных — от низкоуровневого JDBC до высокоуровневого JPA.
Работа с базой данных в Spring обычно строится по слоям:
слой сущностей (Entity)
слой репозиториев (Repository)
сервисный слой (Service)
Такое разделение делает код понятным и масштабируемым.
Определение:
Сущность — это Java-класс, который отображается на таблицу в базе данных.
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
}
Spring Data предоставляет интерфейсы для работы с БД:
CrudRepository
JpaRepository
public interface UserRepository extends JpaRepository<User, Long> {
}
Spring автоматически генерирует реализацию репозитория во время запуска приложения.
Для управления транзакциями используется аннотация @Transactional. Она гарантирует целостность данных при выполнении операций записи.
@Transactional
public void createUser(User user) {
userRepository.save(user);
}
Spring организует работу с БД через четкую слоистую архитектуру и высокоуровневые абстракции. Чаще всего используется связка Spring Data + JPA, так как она минимизирует объем ручного кода.