ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ, ΡΠ²Π°ΠΆΠ°Π΅ΠΌΡΠΉ Π§ΠΈΡΠ°ΡΠ΅Π»Ρ!
Π ΠΏΡΠΈΡΡΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΡΠΊΡΠΎΠΌΠ½ΡΡ ΡΠ΅ΠΌΡ ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π½Π° Spring Boot ΠΏΠΎΡΠ»ΡΠΆΠΈΠ»ΠΎ ΠΏΠΎΠΌΠΏΠ΅Π·Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΎΠΏΡΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΡΠΏΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ°ΠΆΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΏΠΎΡΡΠ°Π»Π΅ JavaRush, ΠΈΠ·Π»Π°Π³Π°Ρ ΠΎΠ±ΠΎΠ·ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π΅Π½ΡΠ° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, ΠΆΠ΅Π»Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π° ΠΏΡΠΎΡΠ½ΠΎΡΡΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ.
ΠΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΠΎΡΡΠΈΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ Π³ΡΡΠ±ΠΎΡΡΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ΅ ΠΌΡΡΠ»Π΅Π½ΠΈΡ, ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΡΡ ΠΊΡΠΈΡΠΈΠΊΡ, Π²Π΅Π΄Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ βΡΠΈΡΠΊΠ°ΠΌ ΠΈ ΡΡΠ°Π΄ΠΈΠ½Π°ΠΌβ ΡΠ΄Π°Π΅ΡΡΡ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΡ Π½Π° Π·Π²Π°Π½ΠΈΠ΅ βΠΏΠ°Π½Π°ΡΠ΅ΠΈβ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΡΠΏΡΡΠΊΠ°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΡΠ°Π²Π»ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ΅ΠΌΡ Π±Π΅Π· ΠΌΠ°Π»Π΅ΠΉΡΠΈΡ
ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ Π΄Π»Ρ Π½Π΅ΡΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ΅ΡΠ½ΠΎ, ΠΎΠΏΡΠΎΠΌΠ΅ΡΡΠΈΠ²ΠΎ ΠΎΡΡΠΈΡΠ°ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅: ΠΌΠ½Π΅ Π±ΡΠ»ΠΎ ΡΡΠΆΠ΅Π»ΠΎ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°. Π Π΅ΡΠ»ΠΈ ΠΡ ΠΈΡΠΏΡΡΡΠ²Π°Π΅ΡΠ΅ ΡΡ
ΠΎΠΆΠΈΠ΅ ΠΎΡΡΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΡΠ΅ΡΠΈ Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ, ΡΠΎ βΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ!β. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Spring Boot ΠΏΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π²ΡΡΡΠΏΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π½Π° ΡΡΠ°ΠΆΠΈΡΠΎΠ²ΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²
Thymeleaf
ΠΈ query
-Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ MySQL Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π²Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡΠ°ΠΊ, Π½Π°ΡΠ½Π΅ΠΌ ΠΆΠ΅!
Spring Boot. Π§ΡΠΎ Π·Π° Π·Π²Π΅ΡΡ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π³ΠΎΡΠΎΠ²ΠΈΡΡ?
ΠΡΠ»ΠΈ ΠΊΡΠ°ΡΠΊΠΎ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ, β Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Pivotel Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄ΡΠ°Π³ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²Π½ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΡΠ½Π° ΠΌΠ°ΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠ²Π»Π΅ΡΠΎΠ². ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ Spring Initializr, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π² IntelliJ IDEA Ultimate Edition (File - New - Project... - Spring Initializr) ΠΈΠ»ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π½Π° web-ΡΠ΅ΡΠ²ΠΈΡΠ΅ start.spring.io, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ½Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ.Π‘Π»Π΅Π΄ΡΡ Π²ΡΠ΄Π²ΠΈΠ½ΡΡΠΎΠΌΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π·Π°Π΄Π°Π½ΠΈΡ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄ΠΆΠ΅Π½ΡΠ»ΡΠΌΠ΅Π½ΡΠΊΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π·Ρ MySQL:
- WEB β ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Apache Tomcat ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ localhost:8080 ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Spring MVC.
- DevTools β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π³ΠΎΡΡΡΠ΅ΠΉ JVM ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°Ρ ; Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΎΡ ΠΎΡΠΈΡΡΠΊΠΈ cache Ρ Thymeleaf, Π΅ΡΠ»ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
- JPA β ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Java ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API (Hibernate Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅) Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
- Thymeleaf (Mustache, AngularJS, Vaadin ΠΈ Π΄Π°Π»Π΅Π΅) β Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ; Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Ρ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌΠΈ html ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π²ΡΠ±ΠΎΡ Π½Π° Thymeleaf, Π²ΡΠ΄Π²ΠΈΠ½ΡΠ²ΡΠ΅ΠΌΡ ΡΠ·ΡΠΊ Π½Π° ΠΊΡΠ°Π΅ΡΠ³ΠΎΠ»ΡΠ½ΡΠΉ ΡΡΠΎΠ»ΠΏ ΠΌΠΈΡΠ°.
- MySQL β ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Java Database Connectivity Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
<dependencies></dependencies>
ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΡ
ΠΎΠΆΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ Π² Π±ΠΎΠ»ΡΡΠΎΠ΅ Π±ΡΠ΄ΡΡΠ΅Π΅
ΠΠ°Π»Π΅Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ: βΠ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ? ΠΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ?β. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΡΠΎΠΈΡΡΡ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ Model-View-Controller: ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ· ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (Model) ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (View); ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Controller. ΠΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ»ΡΠΆΠΈΡ ΠΎΠΏΠΎΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ°Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΊΠΎΠ»ΡΠ·ΠΊΠΎΠΉ Π΄ΠΎΡΠΎΠΆΠΊΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ²Π°ΡΠΈΡΠ΅ΠΉ Π½Π° ΡΡΡΠ΄ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠΏΡΠΈΡΠ΅, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ°ΠΉΠ» Controller Π² ΠΏΠ°ΠΏΠΊΡ controllers Π² Π²Π΅ΡΠΊΡ βjavaβ) ΠΈ Π±Π΅ΡΠ΅ΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅.Π‘ΡΡΠ½ΠΎΡΡΡ β ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ Π΄Π΅ΡΠ°Π»Ρ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅
ΠΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ β Π½Π°ΡΠ° ΠΠΎΠ΄Π΅Π»Ρ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π² Π·Π°Π΄Π°ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΡΡΡΡΠΏΠ°Ρ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ Π²ΡΡΡΠΏΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΎΠ±ΠΎΠ·ΡΠ΅Π½ΠΈΠΈ ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π·Π°ΠΌΠ΅ΡΠΎΠΊ Π² Π·Π°ΠΏΠΈΡΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠΆΠΊΠ΅, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ :- ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅;
- Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²;
- ΠΠ°ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π² ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ;
- ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ βΠ‘Π΄Π΅Π»Π°Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΡΠ΄Π΅Π»Π°Π½ΠΎβ (βΠΡΠΎΡΠΈΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎβ).
@Entity
public class Note {
@Id
@GeneratedValue
private int id;
private String message;
private Date date;
private boolean done;
public Note() {
}
public Note(String message) {
this.message = message;
this.date = new Date();
this.done = false;
}
}
ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. Π‘Π²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π² Spring Π·Π°Π΄Π°Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ, - ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΎΠ»Ρ Π² ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ β@β.
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ @Entity ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Spring Boot Π½Π° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
ΠΊΠ»Π°ΡΡΠ° ΠΊ βΠ‘ΡΡΠ½ΠΎΡΡΠΈβ, Π° @Id ΠΈ @GeneratedValue Π·Π°Π΄Π°ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΏΡΡΠΊΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
Getter and Setter Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΡΡΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°.
ΠΠ°Π»Π΅Π΅, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΏΠ΅Π½Ρ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βrepositoryβ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ NoteRepository, - ΡΠ²ΡΠ·ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π°, - ΠΈ ΡΠ½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ
ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ.
public interface NoteRepository extends JpaRepository<Note, Integer> {
}
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΡΡ. ΠΡΠ°ΡΠΊΠΎ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Spring Boot Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. ΠΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠΎΠ² Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. JpaRepository Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ Π»Π΅ΡΡΠ½ΠΈΡΡ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ°ΠΌΡΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΠΎΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ Π½ΠΈΠΆΠ΅ΡΡΠΎΡΡΠΈΠ΅ CrudRepository ΠΈ PageAndSortingRepository. ΠΠΎΠ»Π΅Π΅ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ ΠΈ ΠΎΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΎΡ ΡΠ΅ΠΌΡ, Π²Π΅Π΄Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Pivotel Π² ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠΏΠ»ΠΎΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·Π° Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ²ΡΠ·ΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ MySQL Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ΅Π΄Π΅ βMySQL Workbenchβ, Π·Π°ΡΠ°Π½Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π² ΡΠ±ΠΎΡΠΊΠ΅ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°:
ΠΠ°Π»Π΅Π΅, ΡΠ»Π΅Π΄ΡΡ Π·Π° ΡΠΊΠ°Π·Π°Π½ΠΈΡΠΌΠΈ ΡΡΠ΅Π΄Ρ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡ
Π΅ΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΠΎΠ»Π΅ΠΉ Π½Π°ΡΠ΅ΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ (Note) ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΅Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ½ΠΈΡΡ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡΠ° MySQL, Π½Π°ΡΡΠΎΠΉΡΠΈΠ²ΠΎ ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°:
- ΠΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΡΠ»Π΅Π²Π° ΡΠΈΠΏΠ° ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠ±ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ βtrueβ ΠΈΠ»ΠΈ βfalseβ Π² Π±ΠΈΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β1β ΠΈΠ»ΠΈ β0β ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ;
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠΏΠ΅ Timestamp. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΉ Π΄ΠΎ ΠΌΠΎΠ·Π³Π° ΠΊΠΎΡΡΠ΅ΠΉ Date, ΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡΡΡ Π»ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ΅.
ΠΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ βMySQL Workbenchβ Π½Π° ΠΎΡΠΏΡΠ°Π²ΠΊΡ Π΄Π°Π½Π½ΡΡ
Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ Π½Π° Π·Π½Π°ΡΠΎΠΊ Ρ βΠΌΠΎΠ»Π½ΠΈΠ΅ΠΉβ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠ»ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠΎΠ΄Π½ΡΡ IDE Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π² application.properties (ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βresourcesβ):
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
Π ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ Note ΠΊ MySQL Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. @Table ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΡ
Π΅ΠΌΠΎΠΉ, Π° @Column - ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»Ρ.
@Entity
@Table(name = "test", schema = "test", catalog = "")
public class Note {
@Id
@GeneratedValue
private int id;
@Column(name = "message")
private String message;
@Column(name = "date")
private Date date;
@Column(name = "done")
private boolean done;
public Note() {
}
public Note(String message) {
this.message = message;
this.date = new Date();
this.done = false;
}
}
ΠΠΈΠ΄ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
Π£Π²Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π»ΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: βΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ ΠΏΡΠ΅ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π±Π΅Π· Π½Π°Π»ΠΈΡΠΈΡ ΠΌΠ°Π»Π΅ΠΉΡΠΈΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉβ. ΠΡΠ΄ΡΡΠΈ ΠΎΡΠΊΡΠΎΠ²Π΅Π½Π½ΡΠΌ, front-end ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ Π·Π°Π½ΡΠ»Π° ΠΏΠΎΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΡΡΠ΅ΠΏΠ°Π»Π° Π½Π΅ΡΠ²Ρ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°. ΠΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΡΠ΅ Thymeleaf ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠ±ΡΠ΅ΡΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΠ΅Π΄Ρ ΡΠ΅Π΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ ΡΠΎΠ½ΠΊΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ°, Ρ ΠΎΡΡ ΠΎΠ±ΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΡ ΠΎΠΆΠ΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ HTML ΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΡΡΠ°ΡΡΠΊΠΎΠ². ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π³Π»Π°Π²Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ) ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ (ASC) ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ (DESC) Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅ΠΌ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° Π²Π΅ΡΠ²ΠΈ βtemplatesβ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βresourcesβ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΡΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ βindexβ (ΠΈΠ»ΠΈ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π»ΠΈΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠΉ) Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π΅ html5. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/head :: head"></head>
<body>
<div class="container">
<div th:replace="fragments/header :: header"></div>
<div th:if="${not #lists.isEmpty(notes)}">
<div th:replace="operations/list :: notebook"></div>
</div>
<div th:replace="fragments/footer :: footer"></div>
</div>
</body>
</html>
Π ΡΠ°ΠΊ, ΡΠ°Π·Π»ΠΎΠΆΠΈΠΌ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡΠΊΠ°ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Thymeleaf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° βth:β, ΡΡΡΠ»ΠΊΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ Π² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π² ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌ ΡΡΠ³Π΅ <html>.
<div th:if="${not #lists.isEmpty(notes)}">
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ βifβ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡ βnotesβ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΎ ΠΏΠ΅ΡΠ΅Ρ
Π»Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Controller, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠΌΠ°Π½Π½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ ΠΎΡΠ΅ΡΡΠ°Π½ΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΠ΅ΡΡ Π½Π°Π·Π°Π΄ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΡ.
<head th:replace="operations/list :: notebook"></head>
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ βreplaceβ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π·Π°ΠΌΠ΅Π½Ρ βΠ·Π°Π³Π»ΡΡΠΊΠΈβ ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ - ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ βnotebookβ ΠΈΠ· βlist.htmlβ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βoperationsβ Π² <div></div> ΡΠ°ΠΉΠ»Π° βindexβ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΏΡΠ½ΠΊΡΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ΠΌ:
<!DOCTYPE html>
<!--suppress ALL -->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<div th:fragment="notebook">
<table class="table table-bordered table-hover horizontal-align">
<thead>
<tr>
<th style="width: 5%">#</th>
<th style="width: 60%">Message</th>
<th class="dropdown" style="width: 20%">Date
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}"><i class="fa fa-chevron-circle-up"></i></a>
<a th:href="@{'/sort/{sortDate}' (sortDate = 'DESC')}"><i class="fa fa-chevron-circle-down"></i></a>
</th>
<th style="width: 5%">Done</th>
<th style="width: 5%">Edit</th>
<th style="width: 5%">Delete</th>
</tr>
</thead>
<tbody>
<tr th:each="note : ${notes}">
<td th:text="${note.id}" style="text-align: center">#</td>
<td th:text="${note.message}">Message</td>
<td th:text="${#dates.format(note.date, 'EEE, d MMM yyyy HH:mm')}" style="text-align: center">Date</td>
<td style="text-align: center">
<i th:if="${note.done} == true" class="fa fa-plus-square-o" style="font-size:20px;color:#337ab7"></i>
<i th:if="${note.done} == false" class="fa fa-minus-square-o" style="font-size:20px;color:#337ab7"></i>
</td>
<td style="text-align: center"><a th:href="@{'/edit/{id}'(id=${note.id})}"><i class="fa fa-edit" style="font-size:20px"></i></a></td>
<td style="text-align: center"><a th:href="@{'/delete/{id}'(id=${note.id})}"><i class="fa fa-trash" style="font-size:20px"></i></a></td>
</tr>
</tbody>
</table>
</div>
</html>
ΠΠ½ΠΎΠ²Ρ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΎΠ±ΠΎΠ·ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Thymeleaf Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠΏΡΡΠΊΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ HTML ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΈΠ»ΠΈ, ΠΈ Π½Π°ΠΏΡΠ°Π²Π»ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Π΄Π²ΠΈΠΆΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
<div th:fragment="notebook">
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ βfragmentβ Π·Π°Π΄Π°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ βreplaceβ. ΠΡΠΈΡΠ΅ΠΌ! ΠΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, Π²Π½ΠΎΠ²Ρ Π²ΡΠ΄Π²ΠΈΠ³Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π² ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}">
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @PostMapping Π² Controller Ρ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠΌ β/sort/{sortDate}β, Π³Π΄Π΅ {sortDate}, - ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΡΠΎ ΡΡ
ΠΎΠΆΠ΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠΈΠΊΠ»Π΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ:
<a th:href="@{'/edit/{id}'(id=${note.id})}">
<tr th:each="note : ${notes}">
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΡΠ΅Π½Ρ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° for Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Java: ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ βnoteβ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π²Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° ${notes} β ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ, β ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠ΄ΡΡΠΈ ΠΎΡΠΊΡΠΎΠ²Π΅Π½Π½ΡΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ°ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅ΠΊΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Thymeleaf Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ - Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°Π³Π°ΠΆΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°. ΠΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ Π² ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΡΠ·ΠΈ Ρ back-end. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠ² ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΡΡΠ»ΠΊΠ΅ Π½Π° Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ.
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π² ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
βΠΡΠ°Π΅ΡΠ³ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΠ°ΠΌΠ΅Π½Ρ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ, - ΠΏΠΎΠΆΠ°Π»ΡΠΉ, Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Controller Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ²ΡΠ·ΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΈ Π²ΠΈΠ΄ΠΎΠΌ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Spring Boot, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΏΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ° GET/POST Π±Π΅Π· ΠΌΠ°Π»Π΅ΠΉΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ NoteController Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βcontrollersβ, Π²Π½ΠΎΠ²Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ:@Controller
public class NoteController {
private NoteService service;
@Autowired
public void setNoteService(NoteService service) {
this.service = service;
}
@GetMapping("/")
public String list(Model model) {
return "index";
}
}
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ
ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄Π»Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»ΡΠΆΠ±ΠΎΠΉ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. ΠΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΏΡΠΎΡΡΠΎΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π±Π΅Π· ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
ΡΠ²ΡΠ·ΠΈ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΉ ΠΌΠ°ΡΡΡ ΡΡ
ΠΎΠΆΠΈΡ
: ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Service Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Spring Boot:
public interface NoteService {
Note getNoteById(Integer id);
void saveNote(Note note);
void updateNote(Integer id, String message, boolean done);
void deleteNote(Integer id);
List<Note> findAll();
}
@Service
public class NoteServiceImpl implements NoteService{
private NoteRepository repository;
@Autowired
public void setProductRepository(NoteRepository repository) {
this.repository = repository;
}
@Override
public Note getNoteById(Integer id) {
return repository.findOne(id);
}
@Override
public void saveNote(Note note) {
repository.save(note);
}
@Override
public void updateNote(Integer id, String message, boolean done) {
Note updated = repository.findOne(id);
updated.setDone(done);
updated.setMessage(message);
repository.save(updated);
}
@Override
public void deleteNote(Integer id) {
repository.delete(id);
}
@Override
public List<Note> findAll() {
return repository.findAll();
}
}
ΠΠΎΠ·Π²ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΎΠ±ΠΎΠ·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Spring Boot. ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ @Autowired ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΡΠ·Ρ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π²ΠΈΠ΄ΠΎΠΌ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @GetMapping("/") ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ βindexβ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° localhost:8080. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ @RequestMapping(value = "/", method = RequestMethod.GET) ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ Π½Π° Π³ΠΎΡΠΎΠ²ΡΡ ModelAndView. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠΏΡΡΠ° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Ρ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΡΡ
ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
Π Π°ΡΡΠΈΡΠΈΠΌ ΠΊΠΎΡΡΠΎΠ»Π»Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ. ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² @GetMapping("/new") ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ βnewβ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ βoperationsβ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ βmessageβ ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ Π½Π° Π³Π»Π°Π²Π½ΡΠΉ Π±Π»ΠΎΠΊ. ΠΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠΊΠ½Π΅ Π²Π²ΠΎΠ΄Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
<input type="text" class="form-control" id="message" th:name="message" placeholder="Enter your note." maxlength="100"/>
@GetMapping("/new")
public String newNote() {
return "operations/new";
}
@PostMapping("/save")
public String updateNote(@RequestParam String message) {
service.saveNote(new Note(message));
return "redirect:/";
}
Π‘Ρ
ΠΎΠΆΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠΈ. ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² ΠΌΠ°ΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ @GetMapping("/edit/{id}") ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΠ· url-ΡΡΡΠΎΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ βnoteβ Ρ Π·Π°ΠΏΠΈΡΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. @RequestParam(value = "done", required = false) boolean done) ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΠ»Ρ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ checkbox ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π²ΠΈΠΆΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Thymeleaf ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ βfalseβ.
@GetMapping("/edit/{id}")
public String edit(@PathVariable Integer id, Model model) {
Note note = service.getNoteById(id);
model.addAttribute("note", note);
return "operations/edit";
}
@PostMapping("/update")
public String saveNote(@RequestParam Integer id, @RequestParam String message,
@RequestParam(value = "done", required = false) boolean done) {
service.updateNote(id, message, done);
return "redirect:/";
}
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΄Π°ΡΡΠΈΡ
ΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ, Π²ΡΠ·ΡΠ²Π°Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
service.deleteNote(id);
return "redirect:/";
}
Π’Π΅ΠΏΠ΅ΡΡ Π²Π½Π΅ΡΠ΅ΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠ²Ρ Π² Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ MySQL ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ query-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Spring Data JPA, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ Controller.
@Controller
public class NoteController {
private String sortDateMethod = "ASC";
@GetMapping("/")
public String list(Model model) {
List<Note> notebook = filterAndSort();
model.addAttribute("notes", notebook);
model.addAttribute("sort", sortDateMethod);
return "index";
}
private List<Note> filterAndSort() {
List<Note> notebook = null;
switch (sortDateMethod) {
case "ASC":
notebook = service.findAllByOrderByDateAsc();
break;
case "DESC":
notebook = service.findAllByOrderByDateDesc();
break;
}
return notebook;
}
Π’Π°ΠΊΠΎΠΉ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ, Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΠΆΠ½ΡΠΉ Query.
ΠΠ΅Π»ΠΎΠ²ΠΊΠΎ ΠΏΡΠΈΠ·Π½Π°Π²Π°ΡΡΡΡ, ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠΏΡΠ΅ΠΊΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌ ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ ΠΏΡΠ΅ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ, ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ - ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, - ΠΏΠΎΡΠΎΠ³ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠΊΠ°Π·ΡΠ²Π°Π»Π°ΡΡ Π½Π°ΠΊΠΎΠΏΠΈΠ²ΡΠ°ΡΡΡ ΡΡΡΠ°Π»ΠΎΡΡΡ, Π½ΠΎβ¦ ΠΎΠ·Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ½ΠΈΠ·ΠΎΡΠ»ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Ρ Query-Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ.public interface NoteRepository extends JpaRepository<Note, Integer> {
List<Note> findAllByOrderByDateAsc();
List<Note> findAllByOrderByDateDesc();
}
Spring Data JPA ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΠΈΠ·Π±Π°Π²Π»ΡΡΡΠΈΡ
ΠΎΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΡ
ΡΠΈΡΠΎΠΊΠΈΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΠΎΠΌ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
List<Note> findAllByOrderByDateAsc();
ΠΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² SQL Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ (findAll) Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ (byOrder) ΠΏΠΎ Π΄Π°ΡΠ΅ (byDate) Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ (Asc). ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π²ΡΠ±ΠΎΡΠΊΡ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠΌ Π·Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π²ΡΠ±ΡΠ°ΡΡ Π²ΡΠ΅ (findAll) Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ (byDoneTrue) Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ (byOrder) ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ (Decs) ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π°ΡΡ (byDate):
Page<Note> findAllByDoneTrueOrderByDateDesc(Pageable pageable);
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½Π°Ρ ΠΈΡΠΏΠΎΠ²Π΅Π΄Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
ΠΡΡ! ΠΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π»ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Shift+F10 ΠΈΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ. Spring Boot ΡΠΎΠ±Π΅ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Apache Maven ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Apache Tomcat ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ localhost:8080. Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π² Π»ΡΠ±ΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ, Π½Π°Ρ
ΠΎΠ΄ΡΠΈΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²ΠΎΠΉ ΠΈ ΡΠ°Π½ΡΠ°Π·ΠΈΠ΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΡΠ΄ΡΡΠΈ ΠΎΡΠΊΡΠΎΠ²Π΅Π½Π½ΡΠΌ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΡΡ, Π²Π½ΠΎΠ²Ρ ΠΈ Π²Π½ΠΎΠ²Ρ ΡΠ±Π΅ΠΆΠ΄Π°ΡΡΡ Π² Π²Π΅ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ·Π½Π°Ρ ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ°Π»Π΅ JavaRush. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π·Π°Π΄Π°Ρ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΌΠ°Π½ΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΊ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π±ΠΈΡΡΠΉ Π² ΡΡΡΠ°ΡΠ΅Π²Π°ΡΡΠ΅ΠΉ ΠΈ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΡΡΠ΅Π³ΠΎ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΡ
ΠΎΠΆΠ΅Π³ΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π§Π΅ΡΡΡΠ΅ ΠΌΠ΅ΡΡΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π² back-end ΡΡΠ΅ΠΊΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π²Π»ΠΎΠΆΠΈΠ»ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅Π»ΡΠΌΠΈ Π³ΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΡ Π»Π΅ΠΊΡΠΈΠΉ ΠΈ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΡΡ
Π·Π°Π½ΡΡΠΈΠΉ. Π₯ΠΎΡΠΈΡΠ΅ Π²Π΅ΡΡΡΠ΅, Π° Ρ
ΠΎΡΠΈΡΠ΅ β Π½Π΅Ρ.
ΠΠ΅Π»Π°Ρ Π½Π΅ ΠΏΠ°ΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», Π²Π΅Π΄Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠΉ ΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π»ΡΡΡΠ΅ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΈ Π»ΠΈΡΠ½ΠΎΡΡΠ½ΠΎΠΌ ΠΏΠ»Π°Π½Π΅. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΡΠ°ΡΡΠΊΠ°Π· ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°Π» ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ²Π΅ΠΆΠΈΡ
ΠΈΠ΄Π΅ΠΈ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΠΎΡΡ
ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ SpringBoot.
P.S. Github.