Ответ
Spring JDBC используется, когда необходим прямой контроль над SQL-запросами и максимальная производительность, а сложности ORM (Object-Relational Mapping) избыточны или вредны.
Основные причины выбора Spring JDBC:
- Производительность: Меньшие накладные расходы по сравнению с Hibernate (нет кэшей, отслеживания состояния, генерации сложного SQL).
- Контроль над SQL: Позволяет писать и оптимизировать запросы вручную, что критично для сложных отчетов или операций с большими объемами данных.
- Простота: Легковесная абстракция, которая убирает boilerplate код (закрытие соединений, обработка исключений), но не скрывает реляционную модель.
- Прозрачность: Легче отлаживать, так как выполняемый SQL полностью контролируется разработчиком.
Типичные сценарии использования:
- Приложения, работающие в основном со сложными
SELECT(отчетность, аналитика). - Высоконагруженные сервисы, где важна каждая миллисекунда.
- Работа с легационными базами данных или нестандартными SQL-конструкциями.
- Простые CRUD-операции без сложной объектной графовой модели.
Пример:
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate;
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<User> findActiveUsers() {
String sql = "SELECT id, name, email FROM users WHERE active = true";
// RowMapper обеспечивает явное и эффективное отображение
return jdbcTemplate.query(sql, (rs, rowNum) ->
new User(rs.getLong("id"), rs.getString("name"), rs.getString("email"))
);
}
}
Spring JDBC — это инструмент для ситуаций, когда SQL — это решение, а не проблема, которую нужно скрыть.