Користь, яку приносить абстракція 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".