Vytvoříme jednoduchou aplikaci pro zobrazování blogových zápisků. Na titulní stránce se bude zobrazovat přehled dvaceti posledních zápisků, nejnovější bue na
prvním místě. Zobrazovat se bude titulek, perex, datum publikování a autor. U zápisku bude odkaz např. „Přečíst“, který povede na stránku s detailem, kde bude
vedle výše uvedených informací také celý zápisek. URL zápisku bude ve tvaru /post/{slug}
, kde slug
je hodnota z odpovídajícího sloupce v databázi. Na
stránce s detailem bude odkaz zpět na titulní stránku.
Databáze obsahuje jednu tabulku pojmenovanou post
. Jak se tabulka vytváří se podívej v souboru src/resources/db/migration/V1__init.sql
.
id
– číselný identifikátor zápisku, primární klíč – v Javě pro něj použij typLong
; aplikaci v tuto chvíli k ničemu nebude, ale v databázi má každý slušně vychovnaý záznam svůj jednoznačný identifikátorslug
– část URL za/post/
, která identifikuje zápisek (tzv. „hezká URL“)author
– jméno autoratitle
– titulek zápiskuperex
– perex, HTML kód prvního odstavce zápisku, který se zobrazuje na úvodní stráncebody
– pokračování zápisku za perexem, HTML kódpublished
– datum publikování, pokud budeNULL
nebo v budoucnosti, zápisek se ještě na titulní stránce nezobrazuje (vyzkoušej si, jak se chová databáze, když je v záznamu hodnotaNULL
a v podmínce je řečeno, že datum musí být menší než nějaká hodnota)
Tabulka s daty je po prvním spuštění aplikace prázdná, pro otestování bude potřeba si nějaké zápisky do tabulky vložit pomocí nástrojů v IntelliJ Idea.
Připojovací URL, které se zadává při konfiguraci panelu Database v IntelliJ Idea, najdeš v souboru src/main/resources/application.yaml
.
- Udělej fork zdrojového repository do svého účtu na GitHubu.
- Naklonuj si repository ze svého účtu na GitHubu na lokální počítač.
- Spusť si naklonovanou aplikaci, aby se vytvotřila databáze. V prohlížeči se na stránce http://localhost:8080/ zatím bude zobrazovat jen chyba, v aplikaci není žádný controller.
- Zprovozni si panel Database v IntelliJ Idea, ať si můžeš ověřit, co je v databázi. Připojovací URL, které se zadává při konfiguraci panelu Database v
IntelliJ Idea, najdeš v souboru
src/main/resources/application.yaml
. Nejjednodušší je použít DataSource from URL. - Vytvoř entitu
Post
a v ní vytvoř fieldy a properties odpovídající databázové tabulce. Nezpomeň na anotace@Entity
,@Id
a@GeneratedValue
. - Vytvoř
JpaRepository
pro entituPost
(pojmenuj jiPostRepository
). - Vytvoř službu
PostService
, která bude pomoc @Autowired získávatPostRepository
. - Ve službě
PostService
vytvoř metodulist()
, která bude vracet seznam všech postů (zatím bez stránkování a řazení). Dále tam vytvoř metodusinglePost(String slug)
, která najde jeden post podle zadanéhoslug
a ten vrátí. - Vytvoř controller a v něm dvě metody, pro zobrazení úvodí stránky se seznamem postů a pro zobrazení jednoho kompletního postu. Controller bude používat službu
PostService
, kterou získá pomocí@Autowired
. Nemusíš řešit případ, když si uživatel vymyslí URL postu, který neexistuje. - Vytvoř šablony pro obě metody controlleru. Na vzhledu nezáleží :-) Pro vložení HTML kódu z modelu do šablony je nutné místo
th:text
použítth:utext
. To zajistí, že Thymeleaf nebude převádět znaky<
a>
, ale vloží je bezezměny do výsledného souboru. - Uprav metodu
list()
vPostService
tak, aby používalaPageable
a omezila výsledek na 20 záznamů. Pro vytvoření správnéhoPageable
použij statickou metoduPageRequest.of(0, 20)
. Vytvoř v repository metodu, která bude vracet Page, bude používatPageable
pro omezení počtu záznamů, načte pouze posty, které mají datum publikace a není v budoucnosti, a seřadí záznamy sestupně podle data publikace. Pro řazení se nebude používat položkasort
zPageable
, ale použije se správný název metody v repository. - Bonus: Můžeš upravit šablonu pro výpis seznamu zápisků tak, aby bylo možné stránkami listovat. Nepoužije se ale číslování stránek, místo toho budou dole
na stránce jen odkazy „předchozí“ a „další“. Použij k tomu metody
hasPrevious()
ahasNext()
na rozhraníPage
. - Zkontroluj, zda vše funguje.
- Commitni a pushnni změny (výsledný kód) do svého repository na GitHubu.
- Vlož odkaz na své repository do tabulky s úkoly na Google Drive.
- Super bonus: Můžeš do aplikace přidat i administraci – stránku, přes kterou bude možné přidávat zápisky, upravovat je a mazat.
- odkaz na stránku Lekce 8
- Java SE 11 Javadoc – dokumentace všech tříd, které jsou součástí základní Javy ve verzi 11.
- Dokumentace Spring Boot – odsud je anotace
@SpringBootApplication
a třídaSpringApplication
. - Dokumentace Spring Framework – odsud jsou anotace
@Controller
,@GetRequest
a třídaModelAndView
. - Dokumentace Thymeleaf – šablonovací systém pro HTML použitý v projektu.
- Unsplash – obrázky a fotografie k použití zdarma