Spring Boot CRUD alkalmazás a Thymeleaf-szel

1. Áttekintés

A CRUD funkciókat biztosító DAO rétegek megvalósítása a JPA entitásokon ismétlődő, időigényes feladat lehet, amelyet a legtöbb esetben el akarunk kerülni. Szerencsére a Spring Boot megkönnyíti a CRUD alkalmazások létrehozását egy szabványos JPA-alapú CRUD adattárak révén.

Ebben az oktatóanyagban megtudhatjuk, hogyan lehet CRUD webalkalmazást fejleszteni a Spring Boot és a Thymeleaf segítségével.

2. A Maven-függőségek

Ebben az esetben a spring-boot-starter-parent-re támaszkodunk az egyszerű függőségkezeléshez, verziószámosításhoz és plug-in konfigurációhoz. Ennek eredményeként nem kell megadnunk a projektfüggőségek verzióit pom.xml fájl kivételével a Java verzió felülírása:

 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.h2adatbázis h2 

3. A tartományréteg

Miután az összes projektfüggőség már megvan, valósítsunk meg most egy naiv tartományréteget.

Az egyszerűség kedvéért ez a réteg egyetlen osztályt fog tartalmazni, amely felelős lesz a modellezésért Felhasználó entitások:

@Entity public class User {@Id @GeneratedValue (strategy = GenerationType.AUTO) private long id; @NotBlank (message = "A név kötelező") privát karakterlánc neve; @NotBlank (message = "Az e-mail kötelező") privát karakterlánc e-mail; // standard kivitelezők / beállítók / getters / toString}

Tartsuk szem előtt, hogy az osztályt a @Entity annotáció. Ezért a KPK végrehajtása, amely a Hibernate, a ebben az esetben képes lesz CRUD műveleteket végrehajtani a tartományi entitásokon. A hibernálás bevezető útmutatójaért keresse fel a Hibernate 5 tavasszal című oktatóanyagunkat.

Ezenkívül korlátoztuk a név és email mezők a @NotBlank kényszer. Ez azt jelenti, hogy a Hibernate Validator segítségével ellenőrizhetjük a korlátozott mezőket, mielőtt egy entitást fenntartanánk vagy frissítenénk az adatbázisban.

Az alapokkal kapcsolatban nézze meg a babellenőrzéshez kapcsolódó oktatóanyagunkat.

4. Az adattár réteg

Ezen a ponton a példa webalkalmazásunk nem csinál semmit. De ez hamarosan megváltozik.

Spring Data JPA lehetővé teszi számunkra a JPA-alapú tárolók (a DAO minta megvalósításának fantázianév) megvalósítását minimális felhajtás nélkül.

A Spring Data JPA a Spring Boot's kulcsfontosságú eleme spring-boot-starter-data-jpa ez megkönnyíti a CRUD funkcionalitás hozzáadását a JPA megvalósítás tetejére helyezett erőteljes absztrakciós réteg révén. Ez az absztrakciós réteg lehetővé teszi számunkra, hogy hozzáférjünk a perzisztencia réteghez anélkül, hogy a nulláról kellene biztosítanunk saját DAO megvalósításunkat.

Hogy alkalmazásunk alapvető CRUD funkcióval rendelkezzen Felhasználó tárgyak, amiket meg kell tennünk, az a CrudRepository felület:

@Repository nyilvános felület A UserRepository kiterjeszti a CrudRepository {}

És ez az! Csak kiterjesztve a CrudRepository felület, a Spring Data JPA megvalósításokat biztosít számunkra az adattár CRUD módszereihez.

5. A vezérlő réteg

Az absztrakciós rétegnek köszönhetően spring-boot-starter-data-jpa az alapul szolgáló JPA megvalósítás tetejére helyezve könnyen hozzáadhatunk néhány CRUD funkciót webalkalmazásunkhoz egy alapszintű webszint segítségével.

Esetünkben egyetlen vezérlőosztály elegendő a GET és POST HTTP kérések kezeléséhez, majd a hívásainkhoz való hozzárendeléshez UserRepository végrehajtás.

A vezérlő osztály a Spring MVC néhány legfontosabb jellemzőjére támaszkodik. A Spring MVC részletes útmutatóját a Spring MVC oktatóanyagunkban találja meg.

Kezdjük a vezérlővel showSignUpForm () és felhasználó hozzáadása() mód.

Az előbbi megjeleníti a felhasználói feliratkozási űrlapot, míg az utóbbi a korlátozott mezők ellenőrzése után új entitást tart fenn az adatbázisban.

Ha az entitás nem teljesíti az érvényesítést, akkor a regisztrációs űrlap újra megjelenik. Ellenkező esetben az entitás mentése után a fennmaradó entitások listája frissül a megfelelő nézetben:

@Controller public class UserController {@GetMapping ("/ signup") public String showSignUpForm (User user) {return "add-user"; } @PostMapping ("/ adduser") public String addUser (@Valid User user, BindingResult result, Model model) {if (result.hasErrors ()) {return "add-user"; } userRepository.save (felhasználó); return "redirect: / index"; } // további CRUD módszerek}

Szükségünk lesz a /index URL:

@GetMapping ("/ index") public String showUserList (Model model) {model.addAttribute ("users", userRepository.findAll ()); return "index"; }

Belül UserController nekünk is lesz showUpdateForm () metódus, amely felelős a Felhasználó a szállítottnak megfelelő entitás id az adatbázisból.

Ha az entitás létezik, akkor azt egy modellattribútumként továbbadjuk a frissítési űrlap nézethez, így az űrlap kitölthető az név és email mezők:

@GetMapping ("/ edit / {id}") public String showUpdateForm (@PathVariable ("id") long id, Model model) {User user = userRepository.findById (id) .orElseThrow (() -> new IllegalArgumentException (" Érvénytelen felhasználói azonosító: "+ id)); model.addAttribute ("felhasználó", felhasználó); return "update-user"; } 

Végül megvan a updateUser () és deleteUser () módszerek a UserController osztály.

Az első megőrzi a frissített entitást az adatbázisban, míg az utolsó eltávolítja az adott entitást.

Mindkét esetben a fennmaradó entitások listája ennek megfelelően frissül:

@PostMapping ("/ update / {id}") public String updateUser (@PathVariable ("id") long id, @Valid User user, BindingResult result, Model model) {if (result.hasErrors ()) {user.setId (id); return "update-user"; } userRepository.save (felhasználó); return "redirect: / index"; } @GetMapping ("/ delete / {id}") public String deleteUser (@PathVariable ("id") long id, Model model) {User user = userRepository.findById (id) .orElseThrow (() -> new IllegalArgumentException ( "Érvénytelen felhasználói azonosító:" + id)); userRepository.delete (felhasználó); return "redirect: / index"; }

6. A nézet réteg

Ezen a ponton megvalósítottunk egy funkcionális vezérlő osztályt, amely CRUD műveleteket hajt végre Felhasználó entitások. Ennek ellenére ebben a sémában még mindig hiányzik egy komponens: a nézeti réteg.

Alatt src / main / resources / templates mappát kell létrehoznunk a regisztrációs űrlap, a frissítési űrlap megjelenítéséhez és a megmaradt listák megjelenítéséhez szükséges HTML-sablonokhoz Felhasználó entitások,

A bevezetőben leírtak szerint a Thymeleaf-et fogjuk használni a sablonfájlok elemzésének alapjául szolgáló sablonmotorként.

Itt található a add-user.html fájl:

 Név E-mail 

Figyelje meg, hogyan használtuk a @{/felhasználó hozzáadása} URL-kifejezés az űrlap megadásához akció attribútum és a ${} változó kifejezések a dinamikus tartalom beágyazásához a sablonba, például a név és email mezők és az érvényesítés utáni hibák.

Hasonló add-user.html, itt van, hogyan update-user.html a sablon kinézete:

 Név E-mail 

Végül megvan a index.html fájl, amely megjeleníti a fennmaradó entitások listáját, valamint a meglévők szerkesztésére és eltávolítására szolgáló linkeket:

Még nincs felhasználó!

Felhasználók

NévEmailSzerkesztésTöröl
SzerkesztésTöröl

Új felhasználó hozzáadása

Az egyszerűség kedvéért a sablonok meglehetősen csontvázasak, és csak a szükséges funkcionalitást biztosítják felesleges kozmetikumok hozzáadása nélkül.

Annak érdekében, hogy a sablonok jobb, figyelemfelkeltő megjelenést kapjanak, anélkül, hogy túl sok időt töltenénk a HTML / CSS-re, könnyen használhatunk egy ingyenes Twitter Bootstrap felhasználói felületet, mint például a Shards.

7. Az alkalmazás futtatása

Végül definiáljuk az alkalmazás belépési pontját. A legtöbb Spring Boot alkalmazáshoz hasonlóan ezt egy egyszerű régivel is megtehetjük fő() módszer:

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

Most nyomjuk meg a „Run” elemet az IDE-ben, majd nyissuk meg a böngészőnket és mutassunk rá // localhost: 8080.

Ha az összeállítás sikeresen lefordult látnunk kell egy alapvető CRUD felhasználói irányítópultot, amely linkeket tartalmaz új entitások hozzáadásához, valamint a meglévők szerkesztéséhez és eltávolításához.

8. Következtetés

Ebben az oktatóanyagban megtanultuk, hogyan készítsünk egy alap CRUD webalkalmazást a Spring Boot és a Thymeleaf segítségével.

Szokás szerint a cikkben bemutatott összes kódminta elérhető a GitHubon.