Приклад 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