Приклад JDBC Spring

Приклад JDBC Spring

Вступ

JDBC (Java Database Connectivity) – це Java API, що забезпечує взаємодію між програмами Java та реляційними базами даних. Spring Framework надає зручні можливості для використання JDBC у програмах Java, абстрагуючись від складнощів низькорівневого програмування JDBC.

Spring JDBC спрощує виконання SQL-запитів, обробку результатів і керування ресурсами бази даних, такими як підключення та транзакції. Розробники можуть використовувати об’єкти JdbcTemplate або NamedParameterJdbcTemplate для зручного доступу до бази даних, а також налаштовувати шаблони для автоматичного відображення результатів у об’єкти Java.

Створення об’єкта DataSource

Для початку роботи з JDBC Spring необхідно створити об’єкт DataSource, який представляє підключення до бази даних. Spring Framework підтримує різні типи об’єктів DataSource, такі як:

* DriverManagerDataSource: для підключення до бази даних за допомогою драйвера JDBC і URL-адреса бази даних.
* JndiObjectFactoryBean: для отримання об’єкта DataSource зі сховища JNDI, керованого сервером додатків.
* HikariDataSource: для використання пулу підключень Hikari, що забезпечує високу продуктивність і ефективність.

Використання об’єкта JdbcTemplate

Об’єкт JdbcTemplate – це основний інтерфейс Spring для взаємодії з базою даних. Він надає зручні методи для виконання SQL-запитів, оновлення та видалення даних, а також для отримання результатів запитів у вигляді списків ResultSet.

java
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

Виконання SQL-запитів

JdbcTemplate надає методи query(), queryForObject(), update() і execute() для виконання різних типів SQL-запитів, вказуючи SQL-запит як рядок:

java
jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> new User(rs.getInt("id"), rs.getString("name")));

Обробка параметризованих запитів

Об’єкт JdbcTemplate також підтримує параметризовані запити, використовуючи методи query(), queryForObject(), update() і execute(). Параметри включаються в запит як об’єкт Map або масив:

java
jdbcTemplate.query("SELECT * FROM users WHERE name = ?", new Object[] {"John Doe"}, (rs, rowNum) -> new User(rs.getInt("id"), rs.getString("name")));

Іменування параметрів

Об’єкт NamedParameterJdbcTemplate розширює JdbcTemplate і надає підтримку для іменованих параметрів у SQL-запитах. Іменовані параметри визначаються як символи : у SQL-запиті і зіставляються із значеннями в Map:

java
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

Map<String, Object> params = new HashMap<>();
params.put("name", "John Doe");

namedParameterJdbcTemplate.query("SELECT * FROM users WHERE name = :name", params, (rs, rowNum) -> new User(rs.getInt("id"), rs.getString("name")));

Транзакції

Spring JDBC підтримує транзакції за допомогою анотації @Transactional. Транзакція – це одиниця роботи, яка виконується як єдине ціле. Якщо будь-яка частина транзакції завершується з помилкою, вся транзакція відкочується, повертаючи дані бази даних до попереднього стану.

java
@Transactional
public void transferMoney(int fromAccountId, int toAccountId, int amount) {
jdbcTemplate.update("UPDATE accounts SET balance = balance - ? WHERE id = ?", amount, fromAccountId);
jdbcTemplate.update("UPDATE accounts SET balance = balance + ? WHERE id = ?", amount, toAccountId);
}

Управління ресурсами

Spring JDBC автоматично керує ресурсами бази даних, такими як підключення та транзакції. Однак розробники також можуть явним чином керувати ресурсами, використовуючи об’єкти Connection і TransactionDefinition.

java
Connection connection = dataSource.getConnection();
try {
connection.setAutoCommit(false);

Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

while (resultSet.next()) {
// Обробка результатів
}

connection.commit();
} catch (SQLException e) {
connection.rollback();
} finally {
connection.close();
}

Висновок

JDBC Spring надає потужні та зручні можливості для взаємодії з реляційними базами даних у програмах Java. Розробники можуть легко виконувати SQL-запити, обробляти результати та керувати транзакціями, використовуючи об’єкти JdbcTemplate або NamedParameterJdbcTemplate. Spring JDBC спрощує роботу з базами даних, роблячи її ефективнішою та менш схильною до помилок.

Поширені запитання

1. Що таке JDBC Spring?
JDBC Spring – це Java API, який спрощує взаємодію між програмами Java та реляційними базами даних.

2. Для чого використовується об’єкт DataSource?
Об’єкт DataSource представляє підключення до бази даних і використовується для отримання з’єднань з базою даних.

3. Яка різниця між JdbcTemplate та NamedParameterJdbcTemplate?
JdbcTemplate підтримує позиційні параметри, тоді як NamedParameterJdbcTemplate підтримує іменовані параметри в SQL-запитах.

4. Як керувати транзакціями в Spring JDBC?
Транзакціями можна керувати за допомогою анотації @Transactional або об’єктів Connection і TransactionDefinition.

5. Як обробляти параметризовані запити в Spring JDBC?
Параметри можуть бути включені в SQL-запит як об’єкт Map або масив.

6. Що таке пул підключень?
Пул підключень – це механізм, який керує з’єднаннями з базою даних і повторно використовує їх, щоб підвищити продуктивність і ефективність.

7. Як налаштувати шаблони Spring JDBC?
Шаблони JdbcTemplate і NamedParameterJdbcTemplate можна налаштувати для автоматичного відображення результатів у об’єкти Java за допомогою класів RowMapper або ResultSetExtractor.

8. Чи підтримує Spring JDBC роботу з NoSQL-базами даних?
Ні, Spring JDBC призначений для роботи з реляційними базами даних.

Додаткові посилання

* Spring Framework JDBC Documentation
* JDBC API Overview
* HikariCP