Спомняте ли си проекта от третия модул на интерфейса, където беше необходимо да се внедри rpg административен панел за API на сървъра? Ако някой си спомня, за съхранение на сървъра е използвана карта. Естествено, в реалния живот такива хранorща не се използват, но се използват бази данни. Целта на този проект ще бъде да се напише алтернативна реализация на слой хранorще с помощта на Hibernate.

За целта са ви необходими:

  1. Форк от хранorще
  2. Изтеглете вашата version на проекта на вашия компютър.
  3. Добавяне на зависимости към pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Направете maven компилация (mvn чиста инсталация). За промяна използваме Java version 1.8.
  5. Добавете конфигурация за стартиране чрез Idea. Изпълнението на този елемент може да бъде намерено в лекцията https://codegym.cc/quests/lectures/cgu.module3.lecture02 (точка 4). Единствената разлика е различното име на артефакта. Ако сте направor всичко правилно и сте стартирали приложението, ще видите нещо подобно:
  6. Стартирайте скрипта за създаване на rpg схема в Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. По избор . Ако искате да видите Howво поведение се очаква, можете да промените com.game.service.PlayerServiceстойността на анотацията от „db“ на „memory“ в класа в параметъра на конструктора . В този случай Spring ще използва . След теста не забравяйте да промените стойността на анотацията обратно на "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Подредете всички необходими анотации в класа на обекта com.game.entity.Player. Таблицата трябва да се казва "player", схемата "rpg". За enams използвайте @Enumerated(EnumType.ORDINAL)в допълнение към анотацията @Column. Нека ви напомня, че дължината на полето за име трябва да бъде до 12 знака, полето за заглавие - до 30 знака. Абсолютно всички полета не трябва да са празни.
  9. PlayerRepositoryDBДобавете частно крайно поле в класа SessionFactory sessionFactory, инициализирайте това поле в конструктора на класа. Използвайте свойствата Howто при нормални задачи (ще работим с MySQL база данни version 8). От интересно - доп
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Това ще ви позволи да не създавате table ръчно (or чрез изпълнение на sql скрипт).
  10. Внедрете всички методи на класа. За разнообразие, нека направим това:
    • Приложете метода getAllчрезNativeQuery
    • Приложете метода getAllCountчрезNamedQuery
    • В метода beforeStopизвикайте sessionFactoryметода y close. Като има анотация за метода @PreDestroy, Spring ще извика този метод, преди да спре приложението, и това ще ви позволи валидно да освободите всички системни ресурси.
    • Прилагането на други методи зависи от вас. Но не забравяйте за транзакциите и ангажиментите за методи, които по няHowъв начин променят съдържанието на базата данни.
  11. Стартирайте приложението. Ако сте направor всичко правилно, ще получите работещо приложение. Но там няма данни, така че стартирайте скрипта init.sql (от ресурси) през Workbench, така че да се появят. След това натиснете F5 в браузъра и проверете дали сте внедрor правилно всички методи.
  12. Би било интересно да видим точно Howви заявки изпълнява Hibernate, така че нека добавим регистриране на заявки. За да направите това, добавете зависимостта p6spy:p6spy:3.9.1 към pom.xml . В папката с ресурси създайте файл spy.properties , в който посочете:
    driverlist=com.mysql.cj.jdbc.Driver
    dateformat=yyyy-MM-dd hh:mm:ss a
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
    
    И в конструктора на класа PlayerRepositoryDB променете две опции:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Сега в изхода на сървъра за всяка заявка ще видите 2 реда. Първият е Howъв оператор се подготвя, вторият е заявката с въведените параметри.

Това е всичко, проектът е готов, поздравления!

Всъщност работата с Hibernate от Spring използва различен подход, който ще разгледаме в петия модул.


Анализ на проекта.