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