Переваги Spring Data
Просте під'єднання до бази даних.
Працює з будь-якою базою даних.
Має реалізацію базових методів CRUD (Create, Read, Update, Delete).
Достатньо правильно назвати метод, щоб зробити потрібний запит до бази даних, оскільки використається Query Builder Mechanism.
Написати свій запит до бази даних можна за допомогою анотації @Query. Водночас надавати реалізацію методу не потрібно.
Мета Spring Data repository – зменшити кількість коду boilerplate, який імплементує шар доступу даних у вашому застосунку для різних баз даних.
Ієрархія репозиторіїв :
org.springframework.data.repository.Repository<T,ID>
org.springframework.data.repository.CrudRepository<T,ID>
org.springframework.data.repository.PagingAndSortingRepository<T,ID>
org.springframework.data.jpa.repository.JpaRepository<T,ID> (also extends
org.springframework.data.repository.query.QueryByExampleExecutor<T>)
org.springframework.data.repository.Repository<T,ID> – центральний інтерфейс Spring Data, є маркером. Приймає тип сутності та тип Id-сутності як параметри.
org.springframework.data.repository.CrudRepository<T,ID> – репозиторій, який надає CRUD- функціонал. Приймає тип сутності та тип Id-сутності як параметри.
org.springframework.data.repository.PagingAndSortingRepository<T,ID> – репозиторій, який надає додатковий функціонал для сортування та пагінації даних. Приймає тип сутності та тип Id-сутності як параметри.
org.springframework.data.jpa.repository.JpaRepository<T,ID> – репозиторій, що надає специфічний для Java Persistence функціонал API. Приймає тип сутності та тип Id-сутності як параметри.
Конфігурація Spring Data
У pom.xml необхідно додати залежність:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version><required-version></version>
</dependency>
У файлі конфігурації застосунку (файл контексту) необхідно додати такі рядки:
В атрибутах тегу beans : xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation=”… http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd …”
Всередині тегу beans : <jpa:repositories base-package="com.itvdn.persistence.dao.repositories"
entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="txManager"/>
<bean id="entityManagerFactory”
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value=”<persistence_unit_name>"/>
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
У теці resource/META-INF вашого застосунку створити файл persistence.xml з таким вмістом:
<persistence-unit name=”name" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value=”dialect"/>
<property name="javax.persistence.jdbc.driver" value=”driver"/>
<property name="javax.persistence.jdbc.user" value=”login"/>
<property name="javax.persistence.jdbc.password" value= ”password"/>
<property name="javax.persistence.jdbc.url" value=”url"/>
<property name="hibernate.connection.useUnicode" value="true"/>
<property name="format_sql" value=”<boolean>"/>
<property name="hibernate.show_sql" value=”<boolean"/>
<property name="hibernate.hbm2ddl.auto" value=”<validate|update|create|create-drop>"/>
</properties>
</persistence-unit>
Де:
Name – назва, яку ви дасте persistence unit.
Dialect – діалект для бази даних. Наприклад: org.hibernate.dialect.MySQLDialect для MySQL.
Driver – драйвер для вашої бази даних*. Наприклад: com.mysql.jdbc. Driver для MySQL.
Login – логін для бази даних.
Password – пароль для бази даних.
Url – рядок під'єднання до бази даних (jdbc:<db>://<host>:<port>/<schema_name>). Наприклад:
jdbc:mysql://localhost:3306/itvdn для схеми itvdn, яка зберігається на локальному MySQL-сервері.
Boolean – true/false за вашим бажанням.
Validate – перевіряє, що схема збігається з вашою моделлю, не вносить зміни до схеми.
Update – оновлює схему для показу на наданих класах з анотацією @Entity.
Create – створює нову схему, яка відповідає вашій моделі, видаляє всі попередні дані.
Create-drop – створює нову схему, як і create, але видаляє її наприкінці сесії.
*Також необхідно додати maven-залежність на бібліотеку з драйвером. Залежить від бази даних.
Ключові слова для створення методів
Анотації
@Repository – показує, що анотований клас є репозиторієм (механізм інкапсуляції зберігання, отримання та пошуку даних). Застосовується для класів DAO (Data Access Object).
@Query – анотація для створення запиту, який буде виконуватися анотованим методом репозиторію.
@RepositoryDefinition – анотація для створення репозиторію. Анотування інтерфейсу цією анотацією приводить до тієї ж поведінки, що й успадкування від Repository.
@Transactional – описує атрибути транзакції лише на рівні методу чи класу. Анотуючи клас, ви кажете Spring, що хочете застосувати цю анотацію до кожного методу. Використовуючи цю анотацію, ви перекладаєте на Spring обов'язок управління транзакціями.
@Entity – показує, що анотований клас є сутністю. Кожен клас із цією анотацією має мати всередині поле з анотацією @Id.
@Id – поле, анотоване цією анотацією, яке визначає первинний ключ сутності. Первинний ключ таблиці зображується на первинному ключі відповідної сутності.
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓4. Spring Data
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
Успіху і до зустрічі!🤩
PRO. 1
Прізвище
Ім'я
По батькові
Стать
Посада
Дата народження
Вивести дані про інженерів, пенсійного віку (чоловікам більше 65-ти років, жінкам 60).
PRO. 2
No поїзда
Пункт і час прибуття
Пункт і час відбуття
Вивести всі відомості про поїзди, час перебування в дорозі яких перевищує 7 годин 20 хвилин.
Обчислити середню вартість усіх комп'ютерів і надрукувати найменування комп'ютерів та їхню середню вартість.
PRO. 3
Прізвище
Ім'я
По батькові
Посада
Зарплата
Дата народження
Вивести відомості про працівників, у яких зарплата вища за середню і вік менше 30-ти років.