Сьогодні ми перейдемо до роботи з базами даних і почнемо наступний важливий модуль Spring — Spring Data JPA.
Основи роботи з даними в застосунках
Дані — це серце будь-якого застосунку. Інтернет-магазини зберігають замовлення, онлайн-банки — транзакції, соцмережі — пости й коментарі. Без надійного зберігання даних застосунок стає як травневий жук: нічого не пам'ятає і при кожному перезапуску починає життя з чистого аркуша. Саме тому бази даних відіграють ключову роль: вони структурують, зберігають і дозволяють ефективно працювати з інформацією навіть при мільйонах записів.
ORM та JPA: ваш міст між світом об'єктів і таблиць
Писати до бази на чистому SQL — це, звісно, круто, але тільки до того моменту, поки вам не доведеться оновити 10 тис. рядків коду після змін у таблицях. Тут на допомогу приходить ORM — Object Relational Mapping. Це технологія, яка перетворює таблиці бази даних на Java-об'єкти і навпаки.
JPA (Java Persistence API) — це стандарт у світі Java для роботи з ORM. Але якщо подумали: "Клас, тепер я пишу менше коду!", то зачекайте. Без реалізації JPA це буде голий інтерфейс (і не той, який нам подобається). Нам потрібен герой. І тут приходить Hibernate.
Spring Data JPA
Spring Data JPA — це чарівна паличка, яка поєднує JPA з простотою й автоматизацією Spring. Ось чому це важливо:
- Автоматизація, дружище! Ти майже не мусиш писати SQL-запити вручну. Spring Data JPA генерує їх за тебе.
- Простота використання. Працювати з даними тепер так само просто, як викликати метод
findAll(). - Стандартна інтеграція. Усе це налаштовується на базі того, що ми вже вивчали в Spring Boot.
Основні концепції
- Сутності (Entities): це ваші об'єкти, які будуть прив'язані до таблиць у базі даних.
- Репозиторії (Repositories): інтерфейси, які спрощують отримання даних. Вони вже вміють робити магію типу
save(),findById()іdeleteAll(). - EntityManager: центральний інструмент для керування життєвим циклом сутностей. Правда, функціонує він десь за лаштунками, і нам особисто з ним майже не доведеться працювати.
- Транзакції: вони дозволяють виконувати операції з базою атомарно. Якщо щось пішло не так, всі зміни можна легко відкотити.
Структура Spring Data JPA
Робота зі Spring Data JPA складається з таких етапів:
- Підключення до бази даних. Ми вказуємо параметри підключення (URL, логін, пароль) у
application.properties. Spring Boot усе візьме на себе. - Створення сутностей (Entities). Ми використовуємо анотації JPA, такі як
@Entity, щоб вказати, який Java-клас відповідає таблиці в базі даних. - Використання репозиторіїв (Repositories). Ось тут починається магія. Ми створюємо інтерфейси, які наслідуються від
JpaRepository, і після цього можна працювати з таблицями як з звичайними об'єктами.
Практика: як це виглядає в коді?
Спочатку треба налаштувати підключення до бази. Але перед цим... створи Spring Boot проект. Так, тепер це — наша рутина.
1. Налаштування підключення в application.properties
# Параметри підключення до бази даних
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
Ми використовуємо вбудовану базу H2 для практики. Вона "тимчасова", але натомість нам нічого не треба встановлювати.
2. Створення сутності (Entity)
Ось приклад сутності User, яка відповідатиме таблиці users в базі даних:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity // Кажемо, що цей клас відповідає таблиці в базі даних
public class User {
@Id // Вказуємо, що це первинний ключ
@GeneratedValue(strategy = GenerationType.IDENTITY) // Автоматична генерація ID
private Long id;
private String name;
private String email;
// Геттери і сеттери
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Клас User створить у базі даних таблицю users з колонками id, name і email.
3. Створення репозиторію (Repository)
Репозиторій — це інтерфейс, який дозволяє нам взаємодіяти з базою даних без написання SQL-запитів:
import org.springframework.data.jpa.repository.JpaRepository;
// JpaRepository автоматично додасть базові методи на кшталт save(), findById(), findAll()
public interface UserRepository extends JpaRepository<User, Long> {
}
4. Робота з даними в контролері
Припустімо, у нас є контролер, який дозволить додавати і отримувати користувачів:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user); // Зберігаємо в базу даних
}
@GetMapping
public List<User> getUsers() {
return userRepository.findAll(); // Повертаємо всіх користувачів
}
}
Тепер у нас є робоча інтеграція з базою даних. Ти можеш відправити HTTP-запит POST на адресу /users, щоб створити нового користувача, або GET на ту ж адресу, щоб отримати всіх користувачів.
Як це допомагає в реальному житті?
Уяви інтернет-магазин: треба зберігати дані про товари, замовлення, клієнтів. На кожному кроці доведеться звертатися до бази даних. Використання Spring Data JPA дозволяє зосередитися на логіці застосунку, а не на писанні SQL-коду. Ти економиш час, уникаєш рутини і зменшуєш ймовірність помилок.
Типові помилки студентів
- Відсутність залежності в
pom.xml. Не забудь підключитиspring-boot-starter-data-jpa. - Неправильна конфігурація бази даних. Одна з найпопулярніших помилок — не вказати параметри в
application.properties, такі якspring.datasource.url. - Помилки в анотаціях. Іноді забувають анотацію
@Entityна класі або@Idна полі. - Жадне завантаження даних у великих таблицях. Ми ще поговоримо про це в одній з наступних лекцій.
Покопайся в цьому коді, спробуй додати нових користувачів і трохи поекспериментуй. Ми тільки починаємо заглиблюватися в роботу з даними, тож розслабся і насолоджуйся цією магією ORM.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ