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