Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Додавання Бази Даних до Нашого Застосунку | Робота з Базами Даних
Spring Boot Backend

bookДодавання Бази Даних до Нашого Застосунку

У попередньому розділі ми розглянули, що таке JPA та Hibernate. У цьому розділі ми інтегруємо базу даних у наш додаток та спробуємо виконати операції CRUD (Create, Read, Update, Delete).

Приклад роботи з базою даних:

Налаштування моделі

Першим кроком є анотування моделі, щоб Hibernate міг працювати з нею та розуміти, до якої таблиці вона належить.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

В анотації @Entity(name = "books") параметр name дозволяє вказати назву сутності, яка за замовчуванням дорівнює назві класу.

Анотація @Table використовується для визначення конкретних налаштувань таблиці, пов'язаної із сутністю.

У нашому випадку ця таблиця створюється за допомогою міграцій, тому нам не потрібно створювати її вручну.

Нам також потрібно, щоб наша сутність автоматично генерувала ID для присвоєння йому унікального значення в базі даних. Для цього можна використати анотацію @Id для поля, яке представляє наш ID, разом з анотацією @GeneratedValue.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Анотації @Id та @GeneratedValue(strategy = GenerationType.UUID) вказують, що поле id є первинним ключем, який автоматично генерується у форматі UUID.

Це забезпечує унікальні рядкові ідентифікатори для кожного запису в таблиці, що є корисним для розподілених систем і гарантує глобальну унікальність ідентифікаторів. UUID зберігаються як рядки.

Додавання репозиторію

Наразі наш репозиторій імітує базу даних, зберігаючи всі сутності у List. Але що, якби я сказав, що використання реальної бази даних насправді значно простiше!

Для взаємодії з реальною базою даних можна використовувати інтерфейс JpaRepository, який надає широкий спектр вбудованих методів для роботи з даними.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

У JpaRepository<Book, String> ми передаємо два параметри: Book, який представляє тип сутності, з якою працюватиме репозиторій, та String, який є типом даних для первинного ключа (ID) сутності Book.

І це все, що потрібно! Тепер у нас є повнофункціональний репозиторій!

Основні методи JpaRepository

Створення власних SQL-запитів

Spring Data JPA може автоматично генерувати запити, якщо метод названо відповідно до шаблону, який відповідає структурі даних. Це здійснюється за допомогою специфічних ключових слів, що вказують, як має бути побудований запит.

Короткий зміст відео

List<Book> findBookByAuthor(String author);

Цей метод автоматично генерує SQL-запит, який шукає всі книги за вказаним author. Згенерований запит виглядатиме так:

SELECT * FROM book WHERE author = ?;

Як це працює

Назва методу findBookByAuthor(String author) складається наступним чином: починається з префікса findBook, що вказує на те, що метод виконує пошук. Далі йде ByAuthor, що позначає поле в сутності Book, яке буде використано для пошуку.

Коли цей метод викликається, Spring Data JPA автоматично генерує запит, який шукає записи, де поле author відповідає переданому параметру.

Генерування SQL-запитів за допомогою @Query

Анотація @Query у Spring Data JPA дозволяє використовувати як JPQL, так і нативний SQL, забезпечуючи гнучкість у виборі відповідного підходу.

JPQL

JPQL (Java Persistence Query Language) працює з об'єктами та їх властивостями.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Цей запит виконує пошук усіх об'єктів Book, у яких поле author відповідає заданому значенню. JPQL є більш абстрактною та відображає структуру моделі даних.

Натівний SQL

Натівний SQL безпосередньо взаємодіє з таблицями бази даних.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

У цьому випадку запит виконується над таблицею book, що дозволяє використовувати специфічні SQL-функції та оптимізації.

Вибір підходу

Якщо потрібен простий запит, який відповідає структурі даних, використовуйте JPQL. Якщо необхідний складний запит або специфічні для бази даних функції, обирайте нативний SQL.

Отже, @Query забезпечує гнучкість для легкого перемикання між цими двома підходами залежно від ваших потреб.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain the difference between JPQL and native SQL in more detail?

How do I create a custom query using the @Query annotation?

What are some best practices for naming repository methods in Spring Data JPA?

Awesome!

Completion rate improved to 3.45

bookДодавання Бази Даних до Нашого Застосунку

Свайпніть щоб показати меню

У попередньому розділі ми розглянули, що таке JPA та Hibernate. У цьому розділі ми інтегруємо базу даних у наш додаток та спробуємо виконати операції CRUD (Create, Read, Update, Delete).

Приклад роботи з базою даних:

Налаштування моделі

Першим кроком є анотування моделі, щоб Hibernate міг працювати з нею та розуміти, до якої таблиці вона належить.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

В анотації @Entity(name = "books") параметр name дозволяє вказати назву сутності, яка за замовчуванням дорівнює назві класу.

Анотація @Table використовується для визначення конкретних налаштувань таблиці, пов'язаної із сутністю.

У нашому випадку ця таблиця створюється за допомогою міграцій, тому нам не потрібно створювати її вручну.

Нам також потрібно, щоб наша сутність автоматично генерувала ID для присвоєння йому унікального значення в базі даних. Для цього можна використати анотацію @Id для поля, яке представляє наш ID, разом з анотацією @GeneratedValue.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Анотації @Id та @GeneratedValue(strategy = GenerationType.UUID) вказують, що поле id є первинним ключем, який автоматично генерується у форматі UUID.

Це забезпечує унікальні рядкові ідентифікатори для кожного запису в таблиці, що є корисним для розподілених систем і гарантує глобальну унікальність ідентифікаторів. UUID зберігаються як рядки.

Додавання репозиторію

Наразі наш репозиторій імітує базу даних, зберігаючи всі сутності у List. Але що, якби я сказав, що використання реальної бази даних насправді значно простiше!

Для взаємодії з реальною базою даних можна використовувати інтерфейс JpaRepository, який надає широкий спектр вбудованих методів для роботи з даними.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

У JpaRepository<Book, String> ми передаємо два параметри: Book, який представляє тип сутності, з якою працюватиме репозиторій, та String, який є типом даних для первинного ключа (ID) сутності Book.

І це все, що потрібно! Тепер у нас є повнофункціональний репозиторій!

Основні методи JpaRepository

Створення власних SQL-запитів

Spring Data JPA може автоматично генерувати запити, якщо метод названо відповідно до шаблону, який відповідає структурі даних. Це здійснюється за допомогою специфічних ключових слів, що вказують, як має бути побудований запит.

Короткий зміст відео

List<Book> findBookByAuthor(String author);

Цей метод автоматично генерує SQL-запит, який шукає всі книги за вказаним author. Згенерований запит виглядатиме так:

SELECT * FROM book WHERE author = ?;

Як це працює

Назва методу findBookByAuthor(String author) складається наступним чином: починається з префікса findBook, що вказує на те, що метод виконує пошук. Далі йде ByAuthor, що позначає поле в сутності Book, яке буде використано для пошуку.

Коли цей метод викликається, Spring Data JPA автоматично генерує запит, який шукає записи, де поле author відповідає переданому параметру.

Генерування SQL-запитів за допомогою @Query

Анотація @Query у Spring Data JPA дозволяє використовувати як JPQL, так і нативний SQL, забезпечуючи гнучкість у виборі відповідного підходу.

JPQL

JPQL (Java Persistence Query Language) працює з об'єктами та їх властивостями.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Цей запит виконує пошук усіх об'єктів Book, у яких поле author відповідає заданому значенню. JPQL є більш абстрактною та відображає структуру моделі даних.

Натівний SQL

Натівний SQL безпосередньо взаємодіє з таблицями бази даних.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

У цьому випадку запит виконується над таблицею book, що дозволяє використовувати специфічні SQL-функції та оптимізації.

Вибір підходу

Якщо потрібен простий запит, який відповідає структурі даних, використовуйте JPQL. Якщо необхідний складний запит або специфічні для бази даних функції, обирайте нативний SQL.

Отже, @Query забезпечує гнучкість для легкого перемикання між цими двома підходами залежно від ваших потреб.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5
some-alt