Lekce 12
Repository použité při lekci
Tentokrát nepoužijeme předem vytvořené repository, ale vytvoříme si projekt úplně od začátku. Inspiraci však můžete hledat v repository FilipJirsak/j2w-lekce12. Není potřeba si dělat fork, protože toto repository nebudeme upravovat – stačí případně si soubory kopírovat z GitHubu nebo si naklonovat přímo moje repository.
Tahák
- Spring Initializr – start.spring.io
- Jedna z cloudových platforem umožňující nasazení Java aplikací: Heroku
- logování – knihovna Logback, konfigurační soubor
/src/main/resources/logback.xml
- konfigurace Springu – konfigurační soubory
/src/main/resources/application.yaml
a/src/main/resources/application-*.yaml
(případně.properties
)
Spring Initializr
- Project: Gradle Project
- Language: Java
- Spring Boot: nejnovější verz (ne SNAPSHOT, ALPHA nebo BETA)
- Packaging: Jar
- Java: doporučuji 11 (8 a 11 jsou LTS verze – Long Term Support, další LTS bude 17, která vyjde v září 2021)
Dependencies
Developer Tools
- Spring Boot DevTools
- Spring Configuration Processor
Web
- Spring Web
Template Engines
- Thymeleaf
SQL
- Spring Data JPA
- Flyway Migration
- H2 Database (při použití databáze H2)
- MariaDB Driver (při použití databáze MariaDB)
- MariaDB Driver (při použití databáze MariaDB)
- MySQL Driver (při použití databáze MySQL)
- PostgreSQL Driver (při použití databáze PostgreSQL)
I/O
- Validation
Heroku
Aby bylo možné projekt nasadit na Heroku, je nutné upravit dvě věci.
Za prvé je potřeba do kořenového adresáře projektu (na stejné místo, kde je např. build.gradle
) přidat soubor system.properties
(vše malými písmeny).
V tomto souboru nakonfigurujeme, že používáme Javu 11 (Heroku standardně používá Javu 8). Do souboru přidej následující řádek:
java.runtime.version=11
Dále je potřeba upravit soubor build.gradle
. Spring Boot od verze 2.5 generuje pi buildu dva různé soubory JAR, Heroku pak spustí náhodně jeden z nich –
spuštění ale funguje jenom s jedním z nich. Proto je potřeba do build.gradle
(např. až na konec souboru) přidat následující konfiguraci, která způsobí, že se
bude při buildu vytvářet jen jeden soubor, jako tomu bylo v dřívějších verzích Spring Bootu.
jar {
enabled = false
}
Spring
- anotace
@Autowired
,@Service
,@Controller
,@Repository
- anotace
@Entity
,@Id
,@GeneratedValue(strategy = GenerationType.IDENTITY)
- anotace
@Version
– optimistické zamykání při přístupu k datům - anotace
@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
,@PatchMapping
,@RequestMapping
- rozhraní
CrudRepository<Entity, ID>
aJpaRepository<Entity, ID>
- rozhraní
Page
aPageable
@SpringBootApplication
– označení výchozí třídy Spring Boot aplikace. Spring Boot následně prohledává package, ve kterém je umístěna tato třída, a všechny package pod ním (na libovolné úrovni zanoření) a zpracuje všechny třídy označené některou z anotací, které Spring zná – např.@Controller
,@Service
,@Repository
apod.@GetMapping
,@PostMapping
a další,@RequestMapping
– anotace označující celý kontroler nebo metodu a určující, jaké požadavky bude zpracovávat (např. cesta, metoda, typ dat požadavku nebo odpovědi)- parametry součástí cesty:
GetMapping("/clanek/{id}")
,@PathVariable int id
ModelAndView
– přepravka, která obsahuje název view a data modelureturn "redirect:/cil";
- anotace
@ModelAttribute
,@Valid
- anotace
@NotNull
,@NotEmpty
,@NotBlank
,@Min
,@Max
,@Email
, … - anotace
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
- třída
BindingResult
Thymeleaf šablony
<html lang="cs" xmlns:th="http://www.thymeleaf.org">
– hlavička HTML souboru, který funguje jako Thymeleaf šablona;lang="cs"
říká, že obsah stránky je v češtině (prohlížeč pak např. nebude nabízet přeložení stránky z angličtiny)${variable}
– získání dat z modelu@{/odkaz}
– vytvoření internetového odkazu@{/odkaz(param1=${value1}, param2=${value2}}
– vytvoření internetového odkazu s parametry
<span th:text="${variable}">…</span>
– vložení textu do obsahu HTML elementu<span th:utext="${variable}">…</span>
– vložení HTML kódu do obsahu HTML elementu
<span th:if="${variable} == 'value'">…</span>
– celý HTML element je vložen jenom v případě, kdy podmínka je splněna<span th:unless="${variable} == 'value'">…</span>
– celý HTML element je vložen jenom v případě, kdy podmínka není splněna
<div th:each="item : ${list}">…</div>
– celý HTML element je opakován pro každou položku seznamulist
, v rámci opakování existuje proměnnáitem
s aktuální hodnotou ze seznamu<div th:each="item, iterStat : ${list}">…</div>
– jako předchozí, ale v proměnnéiterStat
jsou navíc informace o procházení seznamu, jsou to:index
– pořadí aktuálního prvku, začíná 0count
– pořadí aktuálního prvku, začíná 1size
– počet prvků v seznamucurrent
– aktuální prvek seznamu (item == iterStar.current
)- logické proměnné
even
,odd
,first
alast
${#temporals.format(dateOrTime)}
– formátování data, času nebo časové značky (datum+čas) dle výchozího nastavení${#temporals.format(dateOrTime, 'd. M. yyyy H:mm')}
– formátování data, času nebo časové značky (datum+čas) dle určeného formátu
- th-atribut
th:field
– nastavujename
,value
,id
, případněchecked
HTML formuláře
<form action="" method="">…</form>
<input id="" name="" type="" />
- povolené hodnoty atributu type
id
slouží pro elementlabel
name
musí být shodné s pojmenováním property v Javě
<label for="">…</label>
<button></button>
- další formulářové prvky:
<input id="" name="" type="radio" />
<input id="" name="" type="checkbox" />
<select name=""><option value=""></option></select>
Java
enum
– speciální třída obsahující výčet konstant (např. seznam světových strany nebo ročních období)
Odkazy
- 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 Spring Data JPA
- Hibernate ORM – nejpoužívanější implementace JPA
- Dokumentace Thymeleaf – šablonovací systém pro HTML použitý v projektu.
- Dokumentace Thymeleaf + Spring – rozšíření Thymeleaf pro práci se Springem.
- Dokumentace HTML formulářů
- Dokumentace Hibernate Validator
- Databáze H2
- JUnit 5
- SLF4J – API pro logování
- Logback – implementace logování
- frontend frameworky – React, Vue, Svelte, Angular a další, případně čistý JavaScript
- Java (Spring, Micronaut, Helidon a další) – backend, JavaScript – frontend
Úkol
Z lekce 11 a 12 úkoly nebudou. Čas věnujte dokončení případně opravě úkolů z předchozích lekcí.