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év Email Szerkesztés Töröl Szerkesztés Tö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.