Вопрос проверяет понимание основных подходов к работе с базами данных в Spring и умение выбирать подходящий уровень абстракции.
В Spring есть несколько способов работы с базой данных: через JDBC, через Spring JDBC Template и через ORM. JDBC даёт полный контроль, но требует много шаблонного кода. JDBC Template упрощает работу с SQL, но остаётся низкоуровневым. Чаще всего используют JPA/Hibernate, так как он скрывает детали SQL и упрощает работу с объектами.
Spring не навязывает один способ работы с базой данных, а предлагает несколько уровней абстракции — от низкоуровневого до высокоуровневого.
Взаимодействие с БД в Spring — это набор механизмов и абстракций, позволяющих выполнять SQL-запросы, управлять транзакциями и отображать данные базы на Java-объекты.
Это самый низкоуровневый способ, при котором разработчик напрямую работает с SQL и JDBC API.
Особенности
ручное управление Connection, PreparedStatement, ResultSet
много шаблонного кода
максимальный контроль над SQL
Когда используется
критичные по производительности участки
легаси-код
JdbcTemplate упрощает работу с JDBC и убирает большую часть шаблонного кода.
Что упрощает
автоматическое закрытие ресурсов
обработку исключений
маппинг строк результата
Пример идеи использования
jdbcTemplate.query(
"select id, name from users",
(rs, rowNum) -> new User(rs.getLong("id"), rs.getString("name"))
);
Плюсы и минусы
проще JDBC
но всё ещё нужно писать SQL вручную
Самый популярный подход в Spring backend.
Основная идея
таблицы отображаются на сущности
запросы работают с объектами, а не с таблицами
Что даёт
меньше SQL-кода
кэш первого уровня
автоматическое управление связями
Типичное использование
Spring Data JPA
JpaRepository
На практике часто используют несколько способов одновременно.
Пример
CRUD через JPA
сложные отчёты через JdbcTemplate
Spring позволяет выбирать уровень абстракции при работе с БД. В большинстве проектов основой является JPA, а JDBC используется точечно там, где нужен полный контроль.