|
|
Опубліковано 20.02.2019 14:44:57
|
|
|
|

Я також напівготовий у Java, не дуже знайомий із Spring Family Bucket, тому створив проєктний фреймворк на основі онлайн-уроків і власного досвіду.
Середовище проєкту:Версія JDK: 1.8.0_171, версія mysql: 5.7.17, весняне завантаження: 2.1.1.RELEASE, інструменти розробки: idea.
Гібернація та JPA
Веб-проєкт у цій статті використовує Hibernate як фреймворк шару збереження. У Spring Boot нам потрібно зрозуміти ще одну концепцію: JPA
Попереднє речення може бути неоднозначним, але це не означає, що JPA є поняттям у Spring Boot. Натомість це Java Persistence API, який перекладається китайською як: Java Persistence Layer API.
JPA — це стандартна специфікація, заснована на ORM (або O/R відображенні), в якій JPA визначає лише стандартні правила і не забезпечує реалізацію.
Наразі основними реалізаціями JPA є Hibernate, EclipseLink, OpenJPA тощо.
Через домінування Hibernate у сфері технологій розв'язання доступу до даних, стандарт JPA фактично домінує Hibernate.
SpringBoot — це автоматична гвинтівка
Spring Data JPA надається як інтерфейсний інструмент для розробників для застосування фреймворку Hibernate. Наш Spring Boot надає повністю автоматизований «модуль автоматичної залежності»: spring-boot-starter-data-jpa
Структура залежності POM:
Чи є у когось питання щодо файлу POM без посилання на «Hibernate»?
Причина в тому, що, як показано на рисунку вище, spring-boot-starter-data-jpa залежить від hibernate-core, і при посиланні на spring-boot-starter-data-jpa проєкт Maven автоматично вводить пакет, від якого він залежить.
application.yml Профіль:
Офіційне посилання на джерело даних про конфігурацію пружини:Вхід за гіперпосиланням видно.
########################################## ###datasource - Вкажіть інформацію про підключення до бази даних mysql ###spring.datasource.url: MySQL адреса ###spring.datasource.user: Ім'я користувача бази даних ###spring.datasource.password: Пароль бази даних ###spring.datasource.driverClassName: Відповідає драйверу бази даних ###spring.datasource.max-активний: Визначає максимальну кількість активних з'єднань у пулі з'єднань ###spring.datasource.max-idle: Визначає максимальну кількість вільних з'єднань у пулі з'єднань. ###spring.datasource.min-idle: Визначає мінімальне значення, яке потрібно підтримувати (для пулів з'єднань DBCP та Tomcat) ###spring.datasource.initial-size: Вказує кількість з'єднань, спочатку встановлених при запуску пулу з'єднань ### ###其他信息总结: ###spring.dao.exceptiontranslation.enabled чи увімкнено PersistenceExceptionTranslationPostProcessor, стандартне значення істинне ###spring.datasource.abandon-when-percentage-fullsets — відсоток покинутих з'єднань, які закриваються або повідомляються після скасування тайм-ауту ###spring.datasource.allow-pool-suspension При використанні пулу Hikari, чи варто дозволити пулу з'єднань паузу, встановлено як false ###spring.datasource.alternate-username-allowedчи дозволені альтернативні імена користувачів. ###spring.datasource.auto-commitВказує, чи автоматично фіксуються оновлення. ###spring.datasource.catalog вказує стандартний каталог. ###spring.datasource.commit-on-return встановлює, чи потрібно комітувати всі невиконані транзакції при поверненні з'єднання ###spring.datasource.connection-init-sql визначає, що з'єднання створюється і додається до sql, виконаного до пулу з'єднань. ###spring.datasource.connection-init-sqls При використанні пулу з'єднань DBCP вкажіть sql, який потрібно виконати під час ініціалізації ###spring.datasource.connection-properties. [ключ]Визначає атрибути, які потрібно налаштувати при використанні пулу з'єднань DBCP ###spring.datasource.connection-test-query визначає SQL-оператор, який перевіряє легітимність виконання з'єднання ###spring.datasource.connection-timeoutВказує час тайм-ауту для з'єднання, у мілісекундах. ###spring.datasource.continue-on-errorПри ініціалізації бази даних, виникаючи помилка — чи продовжувати чи ні, за замовчуванням є хибним ###spring.datasource.data визначає скрипт Data (DML) ###spring.datasource.data-source-class-name Вказує повністю кваліфіковану назву джерела даних. ###spring.datasource.data-source-jndi вказує адресу JNDI ###spring.datasource.datasource-properties. Використовуючи пул з'єднань Hikari, вкажіть атрибути, які потрібно встановити ###spring.datasource.db-властивості використовує пул з'єднань Tomcat, який визначає властивості, які потрібно встановити. ###spring.datasource.default-auto-commit автоматично фіксується. ###spring.datasource.default-catalog вказує каталог, який підключається до стандартного налаштування. ###spring.datasource.default-read-onlyЧи встановлювати з'єднання за замовчуванням лише для читання. ###spring.datasource.default-transaction-isolationВизначає рівень ізоляції за замовчуванням для підключених транзакцій. ###spring.datasource.driver-class-name вказує назву класу драйвера, яка автоматично визначається за URL jdbc за замовчуванням. ###spring.datasource.fair-queue Чи використовувати FIFO повернення з'єднань. ###spring.datasource.health-check-properties. [ключ] Атрибут пройшов при використанні пулу з'єднання Hikari під час перевірки серцебиття ###spring.datasource.idle-timeoutВказує, як довго з'єднання не використовується, яке за замовчуванням встановлено на режим простою ###spring.datasource.ignore-exception-on-pre-loadЧи ігнорується виключення при ініціалізації пулу з'єднань. ###spring.datasource.init-sqlsql, який виконується при створенні з'єднання ###spring.datasource.initial-size визначає кількість з'єднань, спочатку встановлених при запуску пулу з'єднань ###spring.datasource.initialization-fail-fastПри створенні пулу з'єднань неможливо створити задану мінімальну кількість з'єднань для виключення ###spring.datasource.initializeВкажіть, чи ініціалізувати джерело даних data.sql, за замовчуванням: true ###spring.datasource.isolate-internal-queries вказує, чи слід карантинувати внутрішні запити, за замовчуванням false ###spring.datasource.jdbc-interceptors При використанні пулу з'єднань Tomcat вкажіть розділення перехоплювача jdbc і крапки з комою ###spring.datasource.jdbc-url вказує URL JDBC. ###spring.datasource.jmx-enabled за замовчуванням увімкнено: false ###spring.datasource.jndi-nameВказує назву jndi. ###spring.datasource.leak-detection-threshold Скільки мілісекунд ви виявляєте витік з'єднання при використанні пулу з'єднань Hikari? ###spring.datasource.log-abandoned використовує пул з'єднань DBCP для відстеження покинутих операторів або з'єднань, за замовчуванням це хибне ###spring.datasource.log-validation-errorПри використанні пулу з'єднань Tomcat, чи слід друкувати помилку перевірки. ###spring.datasource.login-timeoutВказує час тайм-ауту для підключення до бази даних. ###spring.datasource.max-вік визначає максимальний вік з'єднань у пулі з'єднань ###spring.datasource.max-life визначає максимальний термін служби з'єднань у пулі з'єднань у мілісекундах. ###spring.datasource.max-open-prepared-statements вказує максимальну кількість підготовлених операторів, які відкриваються. ###spring.datasource.max-wait визначає максимальний час очікування для пулу з'єднань, щоб очікувати повернення з'єднання, у мілісекундах. ###spring.datasource.maximum-pool-sizeВизначає максимальну кількість з'єднань у пулі з'єднань, включаючи активні та неактивні з'єднання. ###spring.datasource.min-evictable-idle-time-millisВказує вільне з'єднання на мінімальний час, протягом якого воно може перебувати в режимі простою, перш ніж його можна буде очистити. ###spring.datasource.min-idle визначає мінімальне значення, яке потрібно підтримувати (для пулів з'єднань DBCP та Tomcat) ###spring.datasource.minimum-idle визначає мінімальну кількість вільних з'єднань, які підтримує з'єднання, і при використанні HikariCP. ###spring.datasource.name Вкажіть назву джерела даних. ###spring.datasource.num-tests-per-eviction-run визначає кількість об'єктів при запуску кожного потоку evitor об'єкта в режимі простою ###spring.datasource.passwordВкажіть пароль бази даних. ###spring.datasource.platform визначає платформу (schema-${platform}.sql для використання для схеми, яка за замовчуванням на: всі ###spring.datasource.pool-nameВизначає назву пулу з'єднань. ###spring.datasource.pool-prepared-statementsВказує, чи варто об'єднувати оператори. ###spring.datasource.propagate-interrupt-stateЧи поширювати стан переривання, якщо потік переривається під час очікування з'єднання. ###spring.datasource.read-onlyПри використанні пулу з'єднань Hikari, чи слід позначати джерело даних як тільки для читання ###spring.datasource.register-mbeans вказує, чи реєструє пул з'єднань Hikari JMX MBeans. ###spring.datasource.remove-abandoned вказує, чи потрібно видаляти з'єднання одразу після тайм-ауту покинутого. ###spring.datasource.remove-abandoned-timeoutВказує час, коли з'єднання має бути припинено. ###spring.datasource.rollback-on-returnЧи слід відкатувати очікувану транзакцію при поверненні з'єднання. ###spring.datasource.schema визначає скрипт Schema (DDL). ###spring.datasource.separator визначає роздільник операторів для ініціалізації скрипта, за замовчуванням: ; ###spring.datasource.sql-script-encoding визначає кодування SQL-скриптів. ###spring.datasource.suspect-timeoutВказує тайм-аут перед друком покинутого з'єднання. ###spring.datasource.test-on-borrowПри запозиченні з'єднання з пулу з'єднань, чи варто тестувати це з'єднання. Створено ###spring.datasource.test-on-connect, чи варто тестувати з'єднання ###spring.datasource.test-on-returnЧи повертається з'єднання до пулу з'єднань. ###spring.datasource.test-while-idleЧи варто проводити тест з'єднання під час простою. ###spring.datasource.time-between-eviction-runs-millis Визначає інтервал часу роботи між перевірками з'єднання в режимі простою, очищенням покинутого з'єднання та розміром пулу з'єднань у режимі простою ###spring.datasource.transaction-isolation визначає рівень ізоляції транзакцій, який задається при використанні пулу з'єднань Hikari ###spring.datasource.url вказує URL JDBC. ###spring.datasource.use-disposable-connection-façade обгортає з'єднання, щоб запобігти його використанню після закриття. ###spring.datasource.use-equal, чи варто використовувати String.equals() замість ==. ###spring.datasource.use-lock заблокований на операції з'єднання ###spring.datasource.usernameВкажіть назву бази даних. ###spring.datasource.validation-interval визначає, скільки мс потрібно виконати перевірку з'єднання. ###spring.datasource.validation-query визначає SQL-запит для перевірки з'єднання при отриманні з'єднання. ###spring.datasource.validation-query-timeoutВказує час тайм-ауту для запиту на перевірку з'єднання. ###spring.datasource.validation-timeoutВстановлює час тайм-ауту для перевірки з'єднання, який задається при використанні пулу з'єднань Hikari ###spring.datasource.validator-class-name Повний кваліфікатор валідатора, який використовувався для тестування запиту. ###spring.datasource.xa.data-source-class-name Вказує повний кваліфікатор джерела даних. ###spring.datasource.xa.properties визначає властивості, передані джерелу даних XA ###spring.datasource.url=jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF8 ########################################## spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.max-активний=20 spring.datasource.max-idle=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10 ########################################## ##SPring Інформація про конфігурацію JPA ###spring.jpa.database вказує цільову базу даних. ###spring.jps.show-sq: Чи варто відображати SQL-оператори ###spring.jpa.hibernate.ddl-auto вказує режим DDL (none, validate, update, create, create-drop). При використанні вбудованої бази даних за замовчуванням є create-drop, інакше — відсутня. ###spring.jpa.hibernate.naming-strategyВизначте політику іменування. ###其他: ###spring.jpa.database-platformВизначає тип цільової бази даних. ###spring.jpa.generate-ddl чи варто ініціалізувати схему при запуску, за замовчуванням — false ###spring.jpa.hibernate.ddl-auto вказує режим DDL (none, validate, update, create, create-drop). При використанні вбудованої бази даних за замовчуванням є create-drop, інакше — відсутня. ###spring.jpa.hibernate.naming-strategyВизначте політику іменування. ###spring.jpa.open-in-view реєструє OpenEntityManagerInViewInterceptor і прив'язує JPA EntityManager до потоку запиту, за замовчуванням є істинним ###spring.jpa.properties додає додаткові атрибути до провайдера JPA. ###spring.jpa.show-sql Чи вмикати SQL-журнал за замовчуванням встановлено як false ########################################## spring.jpa.database = MYSQL spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto = оновлення spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Діалект spring.freemarker.charset=UTF-8
Вся структура пакету
Конфігурація джерел даних:
Клас сутності:
Інтерфейс роботи з базою даних:
Інтерфейс операцій бази даних успадковує від загального класу JpaRepository, і коли він його успадковує, отримує божественну силу, яку надає розробникам:
Ми можемо безпосередньо викликати ці методи для виконання операцій з базою даних, а також можемо налаштовувати HQL для виконання інших операцій, які відповідають нашій особистості, наприклад:
У цьому коді, через @Query коментар,Завершив написання HQLде ":name" узгоджується з параметром у @Param анотації нижче.
Примітка: Назва таблиці в HQL має бути назвою класу ORM-карти, і HQL має деякі відмінності від традиційних SQL-операторів, наприклад, значення "*" відрізняється тощо.
Якщо ви не звикли до HQL, можна також використовувати SQL-оператори:
Наведений вище метод все ще діє під час його виконання.nativeQuery до true означає використання мови SQL。
Клас контролера:
Починайте проєкт
Hibernate автоматично відображає класи сутностей у базу даних для створення релевантних таблиць для нас і автоматично співвідносить таблиці бази даних на основі анотацій, таких як @Table, @Column, @Id, @GeneratedValue (strategy = GenerationType.AUTO) тощо. Зекономте багато роботи з підрахуванням.
(Перед початком проєкту потрібно спочатку створити базу даних, і таблиця буде автоматично створена)
hibernate_sequence таблиця є стратегією генерації id @GeneratedValue анотована, GenerationType.AUTO представляє автоматичну генерацію, за умови, що атрибут id має бути int або long типом, якщо це id типу рядка, то додавання цієї анотації поверх id одразу повідомляє про помилку. Тому, якщо це id типу String, не потрібно анотувати id @GeneratedValue (strategy = GenerationType.AUTO).
Запросити тест
Повний запит на дані та збереження даних через get і post відповідно.
викликатиВхід за гіперпосиланням видно.Запит інтерфейсу POST додати дані, як показано на наступному рисунку:
Запит до бази даних виглядає так:
Отримуйте дані через наступний інтерфейс:
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.
Примітка: Як вимагає наведений інтерфейс, Java дуже чутлива до регістру, чи то URL-адреса, чи параметри — вона має бути чутливою до регістру! Якщо літера має велику або малу літеру, запит не потрапить на інтерфейс або параметр буде порожнім!
Друїд контролює такі ситуації:
Нарешті, додайте вихідний код:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
(Кінець)
|
Попередній:Не вдалося налаштувати DataSourceНаступний:Післяобідній чай Цзєю | Середа, 20 лютого 2019 року
|