Пользу которую приносит абстракция JDBC из Spring Framework, возможно, лучше всего продемонстрировать с помощью последовательности действий, описанных в следующей таблице. В таблице показано, какими задачами занимается Spring, а какие предстоит решать вам.

Таблица 4. JDBC в Spring – кто и что делает?
Действие Spring Вы

Определение параметров соединения.

X

Открытие соединения.

X

Задание SQL-стейтмента.

X

Объявление параметров и предоставление значений параметров

X

Подготовка и выполнение стейтмента.

X

Настройка цикла для выполнение обхода результатов (если они есть).

X

Выполнение работы по каждой итерации.

X

Обработка любого исключения.

X

Работа с транзакциями.

X

Закрытие соединение, стейтмента и набора результатов.

X

Spring Framework позаботится обо всех низкоуровневых задачах, которые делают работу с API-интерфейсом JDVBC такой утомительной.

Выбираем подход к доступу к базе данных JDBC

Вы можете выбрать один из нескольких подходов к формированию основы для доступа к базе данных JDBC. В дополнение к трем вариантам шаблона JdbcTemplate, новый подход с использованием SimpleJdbcInsert и SimpleJdbcCall оптимизирует метаданные базы данных, а стиль объектов РСУБД использует более объектно-ориентированный подход, аналогичный структуре JDO Query. После того, как вы начнете использовать один из этих подходов, вы все равно сможете смешивать и сочетать их, чтобы воспользоваться функцией из другого подхода. Все подходы требуют драйвер, соответствующий стандарту JDBC 2.0, а некоторые расширенные функции требуют драйвер JDBC 3.0.

  • JdbcTemplate – это классический и наиболее популярный подход к JDBC в Spring . Этот "низкоуровневый" подход и все остальные используют шаблон JdbcTemplate "за кулисами".

  • NamedParameterJdbcTemplate оборачивает JdbcTemplate для предоставления именованных параметров вместо плейсхолдеров ?, традиционных для JDBC. Этот подход обеспечивает лучшее документирование и простоту использования, если у вас есть несколько параметров для SQL-инструкции.

  • SimpleJdbcInsert и SimpleJdbcCall оптимизируют метаданные базы данных, чтобы ограничить объем необходимой конфигурации. Этот подход упрощает написание кода, поэтому все, что от вас требуется, – это указать имя таблицы или процедуры и предоставить Map параметров, соответствующих именам столбцов. Это сработает только в том случае, если база данных предоставит адекватные метаданные. Если база данных не предоставит эти метаданные, необходимо обеспечить явную конфигурацию параметров.

  • Объекты РСУБД – включая MappingSqlQuery, SqlUpdate и StoredProcedure - требуют создания многократно используемых и потокобезопасных объектов во время инициализации уровня доступа к данным. Этот подход основан на JDO Query, при котором вы определяете строку запроса, объявляете параметры и компилируете запрос. Как только вы это сделаете, методы execute(…​), update(…​), и findObject(…​) можно будет вызывать несколько раз с различными значениями параметров.

Иерархия пакетов

Структура абстракции JDBC в Spring Framework состоит из четырех различных пакетов:

  • core: Пакет org.springframework.jdbc.core содержит класс JdbcTemplate и его различные интерфейсы обратного вызова, а также множество сопутствующих классов. Подпакет с именем org.springframework.jdbc.core.simple содержит классы SimpleJdbcInsert и SimpleJdbcCall. Другой подпакет под названием org.springframework.jdbc.core.namedparam содержит класс NamedParameterJdbcTemplate и связанные с ним вспомогательные классы. См. разделы "Использование основных классов JDBC для управления базовой обработкой JDBC и обработкой ошибок", "Пакетные операции JDBC" и "Упрощение операций JDBC с помощью классов SimpleJdbc".

  • datasource: Пакет org.springframework.jdbc.datasource содержит вспомогательный класс для получения простого доступа к DataSource и различные простые реализации DataSource, которые можно использовать для тестирования и запуска неизмененного кода JDBC вне контейнера Java EE. Подпакет с именем org.springfamework.jdbc.datasource.embedded обеспечивает поддержку создания встроенных баз данных с помощью движков баз данных Java, таких как HSQL, H2 и Derby. См. раздел "Управление подключениями к базам данных" и "Поддержка встроенных баз данных".

  • object: Пакет org.springframework.jdbc.object содержит классы, которые представляют запросы, обновления и хранимые процедуры РСУБД как потокобезопасные, многократно используемые объекты. См. раздел "Моделирование операций JDBC как объектов Java". Этот подход смоделирован в JDO, хотя объекты, возвращаемые запросами, естественным образом отсоединены от базы данных. Этот более высокий уровень абстракции JDBC зависит от абстракции более низкого уровня в пакете org.springframework.jdbc.core.

  • support: Пакет org.springframework.jdbc.support содержит функциональность преобразования SQLException и некоторые вспомогательные классы. Исключения, генерируемые при обработке JDBC, преобразовываются (транслируются) в исключения, определенные в пакете org.springframework.dao. Это означает, что коду, использующему уровень абстракции JDBC в Spring, не нужно реализовывать специфическую для JDBC или РСУБД обработку ошибок. Все преобразованные исключения непроверяемые, что дает возможность перехватывать исключения, которые можно восстановить, позволив другим исключениям распространиться к вызывающему коду. См. раздел "Использование SQLExceptionTranslator".