Aplikácia Spring Boot CRUD s Thymeleaf

1. Prehľad

Implementácia vrstiev DAO, ktoré poskytujú CRUD funkčnosť na entitách JPA, môže byť opakujúcou sa a časovo náročnou úlohou, ktorej sa chceme vo väčšine prípadov vyhnúť. Spring Boot našťastie uľahčuje vytváranie aplikácií CRUD prostredníctvom vrstvy štandardných úložísk CRUD založených na JPA.

V tomto tutoriále sa dozvieme, ako vyvinúť webovú aplikáciu CRUD s programami Spring Boot a Thymeleaf.

2. Závislosti Maven

V takom prípade sa pri jednoduchej správe závislostí, spravovaní verzií verzií a konfigurácii doplnkov budeme spoliehať na spring-boot-starter-parent. Vo výsledku nebudeme musieť špecifikovať verzie závislostí projektu v našom pom.xml súbor, s výnimkou prepísania verzie Java:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot- starter-data-jpa com.h2database h2 

3. Doménová vrstva

Keď už existujú všetky závislosti na projekte, implementujme teraz naivnú doménovú vrstvu.

Pre jednoduchosť bude táto vrstva obsahovať jednu jedinú triedu, ktorá bude zodpovedná za modelovanie Používateľ subjekty:

@Entity verejná trieda Používateľ {@Id @GeneratedValue (strategy = GenerationType.AUTO) súkromné ​​dlhé ID; @NotBlank (message = "Meno je povinné") súkromné ​​meno reťazca; @NotBlank (message = "E-mail je povinný") súkromný e-mail s reťazcom; // štandardné konštruktory / setre / getre / toString}

Pamätajme, že sme triedu anotovali pomocou @Entity anotácia. Preto je implementácia spoločného parlamentného zhromaždenia, ktorým je Hibernate, v v tomto prípade bude schopný vykonávať operácie CRUD na entitách domény. Úvodného sprievodcu režimom dlhodobého spánku nájdete v našom výučbe o režime dlhodobého spánku s programom Spring.

Okrem toho sme obmedzili názov a e-mail polia s @NotBlank obmedzenie. To znamená, že program Hibernate Validator môžeme použiť na validáciu obmedzených polí pred pretrvávaním alebo aktualizáciou entity v databáze.

Základné informácie o tom nájdete v našom sprievodnom výučbe o overení fazule.

4. Vrstva úložiska

V tomto okamihu naša vzorová webová aplikácia nerobí nič. To sa však čoskoro zmení.

Jarné údaje JPA nám umožňuje implementovať úložiská založené na JPA (vymyslený názov pre implementáciu DAO vzorov) s minimálnymi rozruchmi.

Spring Data JPA je kľúčovou súčasťou Spring Boot spring-boot-starter-data-jpa vďaka čomu je ľahké pridať funkčnosť CRUD prostredníctvom výkonnej vrstvy abstrakcie umiestnenej na vrchole implementácie JPA. Táto abstrakčná vrstva nám umožňuje prístup k persistenčnej vrstve bez nutnosti poskytovania vlastných implementácií DAO od nuly.

Aby sme našej aplikácii poskytli základné funkcie CRUD Používateľ objektov, čo musíme urobiť, je rozšíriť Úložisko Crud rozhranie:

@Repository verejné rozhranie UserRepository rozširuje CrudRepository {}

A je to! Len predĺžením Úložisko Crud Rozhranie Spring Data JPA pre nás zabezpečí implementácie metód CRUD úložiska.

5. Vrstva radiča

Vďaka vrstve abstrakcie to spring-boot-starter-data-jpa na vrchole základnej implementácie JPA, môžeme do našej webovej aplikácie ľahko pridať niektoré funkcie CRUD prostredníctvom základnej webovej vrstvy.

V našom prípade bude stačiť jedna trieda radiča na spracovanie požiadaviek GET a POST HTTP a potom ich mapovať na volania na naše UserRepository implementácia.

Trieda ovládačov sa spolieha na niektoré kľúčové vlastnosti Spring MVC. Podrobného sprievodcu programom Spring MVC nájdete v našom výučbe Spring MVC.

Začnime ovládačom showSignUpForm () a addUser () metódy.

V prvom prípade sa zobrazí formulár na prihlásenie používateľa, v druhom prípade sa po overení obmedzených polí v databáze zachová nová entita.

Ak entita neprejde overením, znova sa zobrazí registračný formulár. Inak po uložení entity sa zoznam pretrvávajúcich entít aktualizuje v príslušnom zobrazení:

@Controller public class UserController {@GetMapping ("/ signup") public String showSignUpForm (User user) {return "add-user"; } @PostMapping ("/ adduser") public String addUser (používateľ používateľa @Valid, výsledok BindingResult, model modelu) {if (result.hasErrors ()) {return "add-user"; } userRepository.save (užívateľ); návrat "redirect: / index"; } // ďalšie metódy CRUD}

Budeme tiež potrebovať mapovanie pre / index URL:

@GetMapping ("/ index") public String showUserList (model modelu) {model.addAttribute ("users", userRepository.findAll ()); návratový "index"; }

V rámci UserController budeme mať tiež showUpdateForm () metóda zodpovedná za vyzdvihnutie Používateľ subjekt, ktorý sa zhoduje s dodaným id z databázy.

Ak entita existuje, odovzdá sa ako atribút modelu do aktualizačného zobrazenia formulára, a preto sa do formulára dajú vyplniť hodnoty názov a e-mail polia:

@GetMapping ("/ edit / {id}") verejný reťazec showUpdateForm (@PathVariable ("id") dlhé id, model modelu) {User user = userRepository.findById (id) .orElseThrow (() -> nová IllegalArgumentException (" Neplatné ID používateľa: "+ id)); model.addAttribute ("užívateľ", užívateľ); vrátiť "update-user"; } 

Nakoniec tu máme updateUser () a deleteUser () metódy v rámci UserController trieda.

Prvý zachová aktualizovanú entitu v databáze, zatiaľ čo posledná danú entitu odstráni.

V obidvoch prípadoch sa zoznam pretrvávajúcich entít príslušne aktualizuje:

@PostMapping ("/ update / {id}") public String updateUser (@PathVariable ("id") long id, @Valid User user, BindingResult result, Model model) {if (result.hasErrors ()) {user.setId (id); vrátiť "update-user"; } userRepository.save (užívateľ); návrat "redirect: / index"; } @GetMapping ("/ delete / {id}") public String deleteUser (@PathVariable ("id") long id, Model model) {User user = userRepository.findById (id) .orElseThrow (() -> new IllegalArgumentException ( "Neplatné ID používateľa:" + id)); userRepository.delete (užívateľ); návrat "redirect: / index"; }

6. Vrstva pohľadu

V tomto okamihu sme implementovali triedu funkčných radičov, ktorá vykonáva operácie CRUD Používateľ subjekty. Aj napriek tomu v tejto schéme stále chýba komponent: vrstva zobrazenia.

Pod src / main / resources / templates priečinok musíme vytvoriť šablóny HTML potrebné na zobrazenie registračného formulára, aktualizačného formulára a vykreslenia zoznamu pretrvávajúcich Používateľ subjekty,

Ako bolo uvedené v úvode, použijeme Thymeleaf ako základný šablónový engine na analýzu súborov šablón.

Tu je príslušná časť dokumentu add-user.html spis:

 Meno e-mailu 

Všimnite si, ako sme použili @ {/ adduser} Výraz URL na určenie formulára akcia atribút a ${} premenné výrazy na vkladanie dynamického obsahu do šablóny, napríklad hodnoty súboru názov a e-mail polia a chyby po overení.

Podobný add-user.html, takto update-user.html vzhľad šablóny:

 Meno e-mailu 

Nakoniec tu máme index.html súbor, ktorý zobrazuje zoznam pretrvávajúcich entít spolu s odkazmi na úpravy a odstránenie existujúcich:

Zatiaľ žiadni používatelia!

Používatelia

názovEmailUpraviťOdstrániť
UpraviťOdstrániť

Pridajte nového používateľa

Pre jednoduchosť vyzerajú šablóny skôr kostrovo a poskytujú iba požadovanú funkčnosť bez pridania nepotrebnej kozmetiky.

Aby sme šablónam poskytli vylepšený a pútavý vzhľad bez toho, aby ste trávili príliš veľa času HTML / CSS, môžeme ľahko použiť bezplatnú súpravu používateľského rozhrania Twitter Bootstrap, napríklad Shards.

7. Spustenie aplikácie

Na záver definujeme vstupný bod aplikácie. Ako väčšina aplikácií Spring Boot, aj toto môžeme robiť s obyčajným starým hlavný() metóda:

@SpringBootApplication verejná trieda Aplikácia {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

Teraz stlačte „Spustiť“ v našom IDE, potom otvorte náš prehliadač a ukážte na to // localhost: 8080.

Ak sa zostava úspešne skompilovala mali by sme vidieť základný informačný panel používateľa CRUD s odkazmi na pridávanie nových entít a na úpravy a odstraňovanie existujúcich.

8. Záver

V tomto tutoriáli sme sa naučili, ako vytvoriť základnú webovú aplikáciu CRUD s programami Spring Boot a Thymeleaf.

Ako obvykle sú všetky ukážky kódu zobrazené v článku k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found