JavaRush /Курси /Модуль 5. Spring /Вступ до Spring Data JPA та роботи з базами даних

Вступ до Spring Data JPA та роботи з базами даних

Модуль 5. Spring
Рівень 5 , Лекція 0
Відкрита

Сьогодні ми перейдемо до роботи з базами даних і почнемо наступний важливий модуль 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. Ось чому це важливо:

  1. Автоматизація, дружище! Ти майже не мусиш писати SQL-запити вручну. Spring Data JPA генерує їх за тебе.
  2. Простота використання. Працювати з даними тепер так само просто, як викликати метод findAll().
  3. Стандартна інтеграція. Усе це налаштовується на базі того, що ми вже вивчали в Spring Boot.

Основні концепції

  1. Сутності (Entities): це ваші об'єкти, які будуть прив'язані до таблиць у базі даних.
  2. Репозиторії (Repositories): інтерфейси, які спрощують отримання даних. Вони вже вміють робити магію типу save(), findById() і deleteAll().
  3. EntityManager: центральний інструмент для керування життєвим циклом сутностей. Правда, функціонує він десь за лаштунками, і нам особисто з ним майже не доведеться працювати.
  4. Транзакції: вони дозволяють виконувати операції з базою атомарно. Якщо щось пішло не так, всі зміни можна легко відкотити.

Структура Spring Data JPA

Робота зі Spring Data JPA складається з таких етапів:

  1. Підключення до бази даних. Ми вказуємо параметри підключення (URL, логін, пароль) у application.properties. Spring Boot усе візьме на себе.
  2. Створення сутностей (Entities). Ми використовуємо анотації JPA, такі як @Entity, щоб вказати, який Java-клас відповідає таблиці в базі даних.
  3. Використання репозиторіїв (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-коду. Ти економиш час, уникаєш рутини і зменшуєш ймовірність помилок.


Типові помилки студентів

  1. Відсутність залежності в pom.xml. Не забудь підключити spring-boot-starter-data-jpa.
  2. Неправильна конфігурація бази даних. Одна з найпопулярніших помилок — не вказати параметри в application.properties, такі як spring.datasource.url.
  3. Помилки в анотаціях. Іноді забувають анотацію @Entity на класі або @Id на полі.
  4. Жадне завантаження даних у великих таблицях. Ми ще поговоримо про це в одній з наступних лекцій.

Покопайся в цьому коді, спробуй додати нових користувачів і трохи поекспериментуй. Ми тільки починаємо заглиблюватися в роботу з даними, тож розслабся і насолоджуйся цією магією ORM.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ