Користь, яку приносить абстракція 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"
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ