JdbcTemplate
Тема дорожной карты · Spring Boot
JdbcTemplate — это класс Spring Framework, упрощающий доступ к базе данных через JDBC: он берёт на себя получение соединения, подготовку запроса, итерацию по ResultSet и трансляцию исключений, оставляя разработчику только написание SQL и логику маппинга строк. В Spring Boot-приложении JdbcTemplate авто-конфигурируется как singleton-бин при наличии DataSource в classpath (предоставляемого spring-boot-starter-jdbc или spring-boot-starter-data-jpa) и внедряется в классы @Repository или @Service через @Autowired. Наиболее часто используемые методы JdbcTemplate: query() с RowMapper<T> для SELECT-запросов, update() для INSERT/UPDATE/DELETE, queryForObject() для результатов с одним значением и batchUpdate() для массовых операций — все они генерируют подклассы DataAccessException вместо проверяемого SQLException. JdbcTemplate беспрепятственно соблюдает аннотацию Spring @Transactional: при вызове внутри транзакционного метода @Service он участвует в активной транзакции, управляемой JpaTransactionManager или DataSourceTransactionManager. Для сложных запросов или хранимых процедур NamedParameterJdbcTemplate расширяет JdbcTemplate, добавляя именованные заполнители параметров (:name вместо ?), что повышает читаемость SQL в коде доступа к данным Spring Boot.
Как это работает
JdbcTemplate покрывает cache + NoSQL + low-level access. @Cacheable + Spring Cache abstraction (Caffeine, Redis, EhCache) меморизируют результаты методов. Spring Data Redis — кеш, sessions, pub/sub, distributed locks. Spring Data MongoDB для document storage. JdbcTemplate для raw SQL, когда JPA мешает (read-heavy queries, сложные joins). Выбирайте правильный инструмент под паттерн — JPA не молоток.
Когда применять
Кешируйте reads, не writes. Local cache — Caffeine; distributed — Redis. Не кешируйте вечно — TTL + инвалидация на writes. Mongo когда document model подходит (event stores, content) — не уходите от реляционного по дефолту. JdbcTemplate быстрый + battle-tested, когда нужен контроль.
Типичные ошибки
Ловушки JdbcTemplate: @Cacheable на методах с mutable state (stale cache); нет eviction (кеш растёт без границ); Mongo "потому что NoSQL" без подходящей document model; raw SQL со string concat (SQL injection — parameter binding).