JavaRush /Java Blog /Random-TK /Bahar köwşüni ýeňmek
Surplus
Dereje
Москва

Bahar köwşüni ýeňmek

Toparda çap edildi
Ertiriňiz haýyrly, gadyrly okyjy! “Spring Boot” -yň ösüşi bilen ilkinji tanyşlygymyz hakda sadaja mowzuga seretmegiň esasy sebäbi bolsa-da, ajaýyp at bolsa-da, size duşmak gowy zat. JavaRush portalynda tejribe geçmek üçin giriş tabşyrygyny tamamlamak, toplanan bilimleriniň güýjüni synamak isleýän adaty bir tehniki uniwersitet talyby tarapyndan umumy syn hödürlemek tejribäm bilen paýlaşmak isleýärin. Bahar köwşüni ýeňmek - 1Baglanan kodda ýa-da pikirleniş usulynda gödekligiň bolup biljekdigini hiç hili inkär etmeýärin we konstruktiw tankydy goldaýaryn, sebäbi hünär ugrunda ösüp boljak “çişikler we gögermeler” sebäpli. Mundan başga-da, berlen şertleri çözmekde we programmanyň aýry-aýry böleklerini bilkastlaýyn taşlamakda nerw ulgamy üçin hiç hili netije bermezden möhüm bir mowzuga girmegiň esasy ähmiýetini galdyryp, “howsala” diýip pikir etmeýärin. Bu hakykat, aç-açanlary inkär etmek hökman däl: bu maňa kyn boldy we belli bir pursata çenli hiç zat düşnüksizdi. Wezipe bilen ilkinji duşuşykdan şuňa meňzeş duýgulary başdan geçirýän bolsaňyz, “Hoş geldiňiz!” ThymeleafGeliň, köp sanly maglumatlary süzmek üçin şablon hereketlendirijisini we queryýerli MySQL serwerine talaplary ulanyp, tejribe giriş synagynyň ýönekeý meňzeşligini ulanyp, “Spring Boot” -da web programmasy ýazalyň . Geliň, başlalyň!

Bahar aýakgaby. Ol haýsy haýwan we ony nädip bişirmeli?

Gysga we gysgaça aýdanyňda, “Pivotel” -den programma döretmek prosesinde gymmatly wagt tygşytlamak, üçünji tarap kitaphanalaryna gönüden-göni birikmek zerurlygyny aradan aýyrmak, täsirli karta suratlaryny we serwetleri ýazmak üçin ajaýyp gural . IntelliJ IDEA Ultimate Edition (Faýl - Täze - Taslama ... - Bahar Initializr) integrirlenen ýa-da start.spring.io web hyzmatynda ýerleşýän “ Bahar Initializr” gurluşykçysyny ulanmak ýeterlikdir , paketleri görkezýär. hödürleýär.
Bahar köwşüni ýeňmek - 2
Öňe goýlan tehniki aýratynlyklara eýerip, MySQL maglumat bazasyny ulanyp ýönekeý web programmasy döretmek üçin jenap agzanyň toplumyny ulanarys :
  • WEB web programmasy döretmek üçin esasy komponent, şol sanda ýerli salgy: 8080 adaty salgydaky ýerli Apache Tomcat serwerini we ähliumumy Bahar MVC çarçuwasyny öz içine alýar.

  • DevTools - düzülen kodda ýa-da şablonlarda üýtgeşmeler ýüze çykanda gyzgyn JVM-de programmany çalt täzeden açmak üçin ulanylýar; Mundan başga-da, saýlanan dwigatel taslama goşulsa, Thymeleaf keşini arassalamakdan azat edýär.

  • JPA maglumat bazalary bilen işlemek üçin zerur tehnologiýa bolup, Java obýektleriniň obýektiw baglanyşyk kartasyny üpjün edýär, guramalary dolandyrmak, tygşytlamak we almak üçin API (biziň ýagdaýymyzda Gibernate ) üpjün edýär.

  • Timileaf (Murt, AngularJS, Vaadin we beýlekiler) - amaly wizuallaşdyrmak üçin şablon hereketlendirijisi; Html prinsipleri bilen deňeşdirenimde, diliň dünýäniň özenine iterýän Timileaf saýladym.

  • MySQL - SQL talaplaryny maglumat bazasyna garşy ýerine ýetirmek üçin Java Database Connectivity draýwerlerini birleşdirýär.
Komponentleriň we döredilişiň iň soňky saýlamasyndan soň, hasam doldurmaga taýyn kataloglar bilen adaty web programma arhitekturasyny alarys. Görüş bölegi bilen täsirleşmek üçin bölekler, CSS grafiki görnüşleri bolsun, adaty HTML sahypalary ýa-da JavaScript işleýşi bolsun, “çeşmelerde” bolmaly we şoňa görä-de, arka bölegi “java” -da ýerleşdirilmelidir. Şeýle hem, taslama gurluşyny we komponentleriň arasyndaky garaşlylygy saklaýan kök aralygyndaky pom.xml faýlyna üns bermelidiris. Goşmaça paketler bilen işlemegi hasam giňeltmek ýa-da gereksiz zatlary aýyrmak isleseňiz, <dependencies></dependencies>şuňa meňzeş usul boýunça bellikleriň arasynda manipulýasiýa etmeli.
Bahar köwşüni ýeňmek - 3

Uly gelejege ilkinji ädimler

Ondan soň gaty gyzykly we mantykly bir sorag ýüze çykýar: “Indi näme etmeli? Bu nähili işlär? Programma Model-View-Controller prinsiplerine esaslanýar: birleşdirilen maglumatlar bazasyndan (Model) subýektleriň okalmagyny gurnaýar we dolandyryş interfeýsinde dolandyryş (View) bilen görkezilýär; komponentleriň arasyndaky aragatnaşyk we iberilen haýyşlara laýyklykda hereketleriň ýerine ýetirilmegi Dolandyryjynyň kömegi bilen amala aşyrylýar. Dowamly ösüş üçin salgylanma nokady bolup hyzmat edýän esasy elementleriň döredilmegi. Süýşýän eňňitden gaça durmak we iş meýdanyndaky ýoldaşlaryňyzyň hormatyny saklamak üçin komponentleri degişli kataloglara ýerleşdirmeli (mysal üçin, Dolandyryjy faýly “java” şahasyndaky kontroller bukjasyna ýerleşdiriň) we seresaplylyk bilen saklaň. iş ýerinde tertip.

Eser uly mehanizmiň kiçi bölegidir

Ora-da başga bir söz bilen aýdylanda, meselede kesgitlenen şertlere görä biziň Modelimiz. Ara alyp maslahatlaşmak mowzugyndan çykyp, giriş taslamasyna gaýdyp gelmek bilen, meseleleriň arasynda iň az tapawudyň bardygyny we indiki gözden geçirilişde ortaça düşünjäni berjaý edip biljekdigimizi ynam bilen tassyklap bileris. Diýeliň, depderdäki bellikler, şol sanda:
  • Umumy akymdaky ýeri kesgitlemek üçin kesgitleýiş belgisi;
  • Belli bir belginiň tekst habary;
  • Ulanyjynyň umumy sanawyna goşan senesi;
  • “Oneerine ýetirildi ýa-da edilmedi” (“Oka ýa-da okama”) kesgitlemek üçin Boolean üýtgeýjisi.
Şonuň üçin geliň, “birlik” atly katalogda Bellik synpyny döredeliň we degişli meýdanlary goşalyň:
@Entity
public class Note {

   @Id
   @GeneratedValue
   private int id;
   private String message;
   private Date date;
   private boolean done;

   public Note() {
   }

   public Note(String message) {
       this.message = message;
       this.date = new Date();
       this.done = false;
   }
}
Teoretiki nukdaýnazardan nämeleriň bolup geçýändigine has giňişleýin düşünmek üçin diskussiýa temasyndan başga bir gyşarmak. Springaz paslynda komponentleriň arasyndaky baglanyşyk düşündirişler bilen kesgitlenýär - obýektleriň öňündäki ýörite görkezijiler, olaryň her biri mehanizmde belli bir rol oýnaýar we “@” nyşany bilen başlaýar. @Entity düşündiriş, “Bahar Boot” -a indiki synp maglumatlarynyň “Edara” degişlidigini görkezýär we @Id we @GeneratedValue köp sanly maglumatlary gaýtadan işlenende iteratoryň awtomatiki öndürilmegi bilen saýlanan meýdany kesgitleýär. Wizual formatyň ykjamlygyny ýokarlandyrmak üçin standart Getter we Setter goşmagy bilgeşleýin goýmaýaryn. Ondan soň, ýazgylary saklamak üçin maglumat bazasynyň ulanylmagyny göz öňünde tutup, programmany ösdürmegiň indiki ädimine geçeris: alyş-çalyş zynjyrynda birleşdiriji element bolan “ammar” katalogynda “NoteRepository” interfeýsini dörederis we iň köp miras alarys. Has giňişleýin işlemek üçin amatly ammar, saklanylýan guramany we bitewi iteratoryň elýeterliligini görkezýär.
public interface NoteRepository extends JpaRepository<Note, Integer> {
}
Aslynda bu hemmesi. Gysga we gysga. Indi “Spring Boot” maglumatlar bazasy bilen özara gatnaşyklary guramak üçin döredilen komponenti ulanar. Hereket etmek üçin dürli potensialy bolan miras ammarlarynyň köp görnüşi bar. JpaRepository basgançagyň başynda we iň aşagyndaky CrudRepository we PageAndSortingRepository ýaly iň uly potensiala eýe. Mundan beýläk gidip, mowzukdan daşlaşmarys, sebäbi käbir inçelikleri Pivotel web sahypasynda tehniki resminamalarda tapyp bilersiňiz. Indi, maglumat şekilini durmuşa geçireniňizden we programma tarapynda aragatnaşyk usullaryny kesgitläniňizden soň, resmi işläp düzüjiniň ýygnagynda iş stoly platformasynda öňünden gurlan degişli “MySQL Workbench” daşky gurşawda MySQL maglumat bazasyny döretmäge üns bermeli. ýerli serwer döretmek üçin goşmaça paketler bilen:
Bahar köwşüni ýeňmek - 4
Ondan soň, esasy penjiredäki häzirki ýerli serwer bilen nyşanjyga basanymyzdan soň, daşky gurşawyň görkezmelerine eýerip, kärhanamyzyň meýdanlaryna görä bellik diagrammasyny döredýäris we degişli maglumatlar bilen doldurýarys. Islenýän netijäni üstünlikli gazanmak üçin gyssagly ünsi talap edýän MySQL şiwesiniň inçeliklerini aýratyn düşündirmek zerur:
  • Munuň ýaly aýratyn Boolean görnüşi ýok. Islegleri gaýtadan işlemek boýunça islendik amallar degişlilikde “hakyky” ýa-da “ýalan” bit bahasyna “1” ýa-da “0” öwrüler;
  • Sene bütinleý Timestamp görnüşinde saklanýar. Coreadro bilen tanyş bolan Sene ulansaňyz, diňe senenamadaky ýagdaý bilen çäklenmeli bolarsyňyz.
Bahar köwşüni ýeňmek - 5
Taýýarlyk ädimleri gutarandan soň, gurallar panelindäki “ýyldyrym” nyşanyna basyp, ýerli serwere maglumat ibermek üçin “MySQL Workbench” -ni görkezýäris. Indi, maglumat goşmak dogry ýerine ýetirilen bolsa, häzirki maglumat bazasynyň konfigurasiýasyny application.properties (köplenç “çeşmeler” katalogynda ýerleşýär) goşmak bilen ösüşi dowam etdirmek üçin öz IDE-ä arkaýyn gaýdyp bileris:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
Iň soňunda bolsa bellikleri ulanyp, Bellik guramasyny MySQL bilen baglanyşdyrmak. @Table, saýlanan at we shema bilen tablisanyň ulanylyşyny görkezýär, @Column üýtgeýänleriň belli bir meýdana degişlidigini görkezýär.
@Entity
@Table(name = "test", schema = "test", catalog = "")
public class Note {

   @Id
   @GeneratedValue
   private int id;
   @Column(name = "message")
   private String message;
   @Column(name = "date")
   private Date date;
   @Column(name = "done")
   private boolean done;

   public Note() {
   }

   public Note(String message) {
       this.message = message;
       this.date = new Date();
       this.done = false;
   }
}

Ulanyjy interfeýsini görüň

Haýp, aşakdakylary arkaýyn aýdyp bileris: "Programmany wizuallaşdyrmak, azajyk teoretiki ýa-da amaly bilim bolmazdan esasy büdremek bolar." Dogrusyny aýtsam, öňdäki bölek umumy işiň ajaýyp mukdaryny aldy we uzak wagtyň dowamynda nerwimi ynam bilen gowşatdy. Emma “Thymeleaf” -yň ajaýyp ýönekeýligi sebäpli, ençeme jadyly ýeňlişlerden soň laýyk ylalaşyk tapmak mümkin boldy. Goşmaça pikir, umumy düşünje şuňa meňzeş bolsa-da, saýlanan dwigateli ulanmagyň kynçylyklary barada bolar. Esasy usul, iň arassa HTML ulanmak we birmeňzeş bölümleriň köp gaýtalanmazlygy üçin iň soňky displeýi aýratyn böleklerden ýygnamak ukybydyr. UI arhitekturasy dolandyryşlar bilen nawigasiýa çyzgysyndan (täze ýazgy goşmak, esasy sahypa gaýdyp gelmek) we belligiň ýokarlan wagtynda (ASC) goşulan wagty boýunça tertipleşdirilen guramalary görkezmek üçin dinamiki tablisadan ybarat esasy sahypadan ybaratdygyny kabul edeliň. ýa-da peselmek (DESC) ugry. manylary. Recordshli ýazgylaryň görkezilişini ýokarlanýan tertipde standart pozisiýa hökmünde kabul edeliň. Saýlanan şablon hereketlendirijisiniň iýerarhiki syýasatyna laýyklykda, komponentleri wizuallaşdyrmak elementleri “çeşmeler” katalogynda “şablonlar” bölüminde ýerleşmeli. Netijede, komponentler bilen mundan beýläkki manipulýasiýa öňe sürlen şertleri göz öňünde tutýar. Html5 şablonynda “indeks” (ýa-da şahsy islegiňize görä başga at) ady bilen esasy sahypa döredeliň. Mysal üçin:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/head :: head"></head>
<body>
<div class="container">
   <div th:replace="fragments/header :: header"></div>
   <div th:if="${not #lists.isEmpty(notes)}">
       <div th:replace="operations/list :: notebook"></div>
   </div>
   <div th:replace="fragments/footer :: footer"></div>
</div>
</body>
</html>
Şeýlelik bilen, geliň, soňky programmanyň esasy böleklerini aýyralyň. Tymeleaf proseduralaryň ulanylyşyny görkezmek üçin aýratyn sintaksis ulanýar we açylyş <html> belligine hökmany suratda girýän kitaphana baglanyşygy “th:” açar söz bilen başlaýar.
<div th:if="${not #lists.isEmpty(notes)}">
“If” amaly adaty iş usullaryndan düýpgöter tapawutlanmaýar we gelýän “bellikler” atributyny mundan beýläk görkezmek üçin obýektleriň bardygyny barlaýar. Modeliň özara täsirini guramak we wizuallaşdyrmak üçin ulanylyşyny göz öňünde tutup, Dolandyryjynyň kömegi bilen mowzugyň bir-birine meňzeşligini aýratyn bellemelidiris. Geljekde köp düşnüksiz pursatlar emele gelýär, isleseňiz yzyna gaýdyň.
<head th:replace="operations/list :: notebook"></head>
“Çalyşmak” amaly “stubyň” ýa-da işjeň blokyň häzirki ýa-da aýratyn sahypadan saýlanan bölek bilen çalşylmagyny görkezýär - soňky mysal mysalda aýdyň görkezilýär. “Notebook” diýilýän bölegi “amallar” katalogynyň “list.html” -inden “indeks” faýlynyň <div> </div> göçürýäris we ahyrky barmaly ýerdäki mazmuny doly çalyşýarys. Çykýanlaryň aşakdaky mazmuny bar:
<!DOCTYPE html>
<!--suppress ALL -->
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:th="http://www.thymeleaf.org">

<div th:fragment="notebook">
   <table class="table table-bordered table-hover horizontal-align">
       <thead>
       <tr>
           <th style="width: 5%">#</th>
           <th style="width: 60%">Message</th>
           <th class="dropdown" style="width: 20%">Date
               <a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}"><i class="fa fa-chevron-circle-up"></i></a>
               <a th:href="@{'/sort/{sortDate}' (sortDate = 'DESC')}"><i class="fa fa-chevron-circle-down"></i></a>
           </th>
           <th style="width: 5%">Done</th>
           <th style="width: 5%">Edit</th>
           <th style="width: 5%">Delete</th>
       </tr>
       </thead>
       <tbody>
       <tr th:each="note : ${notes}">
           <td th:text="${note.id}" style="text-align: center">#</td>
           <td th:text="${note.message}">Message</td>
           <td th:text="${#dates.format(note.date, 'EEE, d MMM yyyy HH:mm')}" style="text-align: center">Date</td>
           <td style="text-align: center">
               <i th:if="${note.done} == true" class="fa fa-plus-square-o" style="font-size:20px;color:#337ab7"></i>
               <i th:if="${note.done} == false" class="fa fa-minus-square-o" style="font-size:20px;color:#337ab7"></i>
           </td>
           <td style="text-align: center"><a th:href="@{'/edit/{id}'(id=${note.id})}"><i class="fa fa-edit" style="font-size:20px"></i></a></td>
           <td style="text-align: center"><a th:href="@{'/delete/{id}'(id=${note.id})}"><i class="fa fa-trash" style="font-size:20px"></i></a></td>
       </tr>
       </tbody>
   </table>
</div>
</html>
Geliň, konstruktiw synyna gaýdyp geleliň we tertipde ulanylýan Thymeleaf funksiýalaryna geçeliň, ulanylýan adaty HTML sintaksisini ýa-da grafiki stillerini taşlap, şablon hereketlendirijiniň mehanizmine düşünmäge aýratyn üns bereliň.
<div th:fragment="notebook">
“Bölek” amaly bölekleriň adyny kesgitleýär we blokuň mazmunyny “çalyşmak” buýrugy üçin ulanmaga mümkinçilik berýär. Mundan başga-da! Bir sahypanyň içinde köp ulanylyş hiç hili aradan aýrylmaýar, programmirleme dillerindäki proseduralar ýa-da funksiýalar bilen meňzeşligi täzeden öňe sürýär.
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}">
@PostMapping düşündirişine jaň, “/ sort / {sortDate}” kartalaşdyrmak bilen Dolandyryjyda ulanylýar, bu ýerde {sortDate} çykýan sort ugry atributy. Aşakdaky blokda şuňa meňzeş bir zady görmek bolýar, ulanyjy tarapyndan saýlanan elementiň iterasiýa aýlawynda ýerleşişine baglylykda dinamiki üýtgeşme goşýar:
<a th:href="@{'/edit/{id}'(id=${note.id})}">
<tr th:each="note : ${notes}">
Bahalary sanamak, Java sintaksisinde blok üçin tanyş ulanylyşyna gaty meňzeýär: üýtgeýän “bellik” häzirki elementi giriş atributlary massiwinden $ {bellikler} - subýektleriň massiwinden alýar we bahalary üýtgetmek üçin ulanylýar. Soňrak. Dogrusyny aýtsak, amaly ulanylyş mysallary bilen “Thymeleaf” mümkinçilikleriniň giň sanawyny sanamak üçin aýratyn bir makala bagyşlap bileris - şablon dwigateli gaty ýönekeý we goşmaça sintaksisiň täsirli goşlaryny öwrenmegi talap etmeýär. Aboveokarda beýan edilen funksiýalar işläp düzüjileriň resmi web sahypasyndaky tehniki resminamalarda beýan edilýär we arka tarapy bilen aragatnaşygy guramakda möhüm rol oýnaýar. Şonuň üçin indiki we ahyrky bölüme arkaýyn geçip bilersiňiz. Elbetde, makalanyň soňundaky taýýar programma baglanyşygyna wizuallaşdyrmagyň galan böleklerini goşmak arkaly.

Kiçi kompaniýada dolandyryjy, dolandyryjy

“Web programmasynyň arhitekturasynyň esasy özeni” - belki, programmanyň işini guramakda Dolandyryjy komponentiniň ähmiýeti barada has takyk düşündiriş tapmagyň mümkinçiligi ýok: amallaryň köpüsi takyk birleşdiriji element tarapyndan amala aşyrylýar. model we görnüş. “Spring Boot” -yň hereket mehanikasynyň kömegi bilen kartalaşdyrmak we GET / POST haýyş usullaryny sähelçe kynçylyksyz ulanyp bilersiňiz we maglumat ammaryny awtomatiki birikdirip bilersiňiz. “NoteController” synpyny “gözegçilik edijiler” katalogynda aýratyn faýlda döredeliň, ýene-de degişli düşündirişiň ulanylyşyna salgylanalyň:
@Controller
public class NoteController {

   private NoteService service;

   @Autowired
   public void setNoteService(NoteService service) {
       this.service = service;
   }

   @GetMapping("/")
   public String list(Model model) {
       return "index";
   }
}
Seresaply göz, iş logikasyny maglumat bazasy dolandyryş hyzmaty bilen işlemekden izolirlemek üçin hyzmat goşmak bilen baglanyşykly programma arhitekturasynyň dizaýnynda möhüm üýtgeşmäni görüp biler. Tamamlanan hereketler, taýýar önümiň köpugurlylygyny ýokarlandyrmak we maglumatlar bazasy bilen aragatnaşyk usullaryny üýtgetmezden ulanyjy interfeýsiniň işleýşini üýtgetmek üçin giň mümkinçilikleri talap edýär. Adaty şekillendiriş meňzeşleriň köpüsinden asla tapawutlanmaýar: interfeýs aýratyn katalogda ýerleşýär we “Bahar Boot” -y kesgitlemek üçin @Service belligi bolan synp tarapyndan amala aşyrylýar:
public interface NoteService {
   Note getNoteById(Integer id);
   void saveNote(Note note);
   void updateNote(Integer id, String message, boolean done);
   void deleteNote(Integer id);
   List<Note> findAll();
}

@Service
public class NoteServiceImpl implements NoteService{

   private NoteRepository repository;

   @Autowired
   public void setProductRepository(NoteRepository repository) {
       this.repository = repository;
   }

   @Override
   public Note getNoteById(Integer id) {
       return repository.findOne(id);
   }

   @Override
   public void saveNote(Note note) {
       repository.save(note);
   }

   @Override
   public void updateNote(Integer id, String message, boolean done) {
       Note updated = repository.findOne(id);
       updated.setDone(done);
       updated.setMessage(message);
       repository.save(updated);
   }

   @Override
   public void deleteNote(Integer id) {
       repository.delete(id);
   }

   @Override
   public List<Note> findAll() {
       return repository.findAll();
   }
}
Dolandyryjy gözden geçirmäge gaýdyp geleliň we “Bahar Boot” usullaryny ulanyp, işleri gurnamagyň çylşyrymlylygyna seredeliň. @Autowired düşündiriş, hyzmaty degişli görnüşiň kesgitlenen üýtgeýjisine awtomatiki birikdirmegiň we maglumat bazasy bilen baglanyşyk gurmagyň zerurdygyny görkezýär. Lokalhost: 8080-e jaň gelende “indeks” atly sahypany yzyna gaýtaryp berýän @GetMapping ("/") düşündirişinde görkezilen görnüşiň aragatnaşygyna has köp üns berilmelidir. Giňeldilen beýany @RequestMapping (value = "/", method = RequestMethod.GET) görkezip ýa-da gaýdyp geliş görnüşini taýýar ModelAndView bilen çalşyp, başgaça çemeleşip bilersiňiz. Şeýle-de bolsa, amaly ulanylyşdaky häzirki tejribä görä, ahyrky netijede düýpli tapawutlary duýmaýaryn we adaty warianty ulanýaryn. Goşmaça goýmany ulanyp täze elementleri goşup, kontrolleýeri giňeliň. Ulanyjy nawigasiýa çyzgysynyň elementine basandan soň, @GetMapping ("/ new") çagyrylýar we "amallar" katalogyndan "täze" sahypa ugrukdyrylýar, düwmäni ulanyp girizilen maglumatlary tassyklanda "habar" atly parametr yzyna gaýtarylýar. we esasy bloklara gönükdirmek. Geçirilen bahanyň ady bilen giriş penjiresinde üýtgeýän adyň doly gabat gelmeginiň zerurlygy aýratyn bellemegi talap edýär.
<input type="text" class="form-control" id="message" th:name="message" placeholder="Enter your note." maxlength="100"/>
@GetMapping("/new")
public String newNote() {
   return "operations/new";
}

@PostMapping("/save")
public String updateNote(@RequestParam String message) {
   service.saveNote(new Note(message));
   return "redirect:/";
}
Recordazgyny täzelemek üçin şuňa meňzeş usul ulanylýar. Dolandyryşa basanyňyzdan soň, @GetMapping ("/ edit / {id}") kartalaşdyrylýar we URL setirinden kesgitleýji geçirilýär, mundan beýläk redaktirlemek üçin "bellik" atributy goşulýar. @RequestParam (baha = "ýerine ýetirildi", zerur = ýalan) ýerine ýetirildi) belli bir bahany kesgitlemek, Thymeleaf şablon hereketlendirijisini ulananyňyzda bellik gutusynyň ulanylmagynda möhüm rol oýnaýar we deslapky ýagdaýda "ýalan" bolýar.
@GetMapping("/edit/{id}")
public String edit(@PathVariable Integer id, Model model) {
   Note note = service.getNoteById(id);
   model.addAttribute("note", note);
   return "operations/edit";
}

@PostMapping("/update")
public String saveNote(@RequestParam Integer id, @RequestParam String message,
                      @RequestParam(value = "done", required = false) boolean done) {
   service.updateNote(id, message, done);
   return "redirect:/";
}
Maglumatlar bazasyndan elementleri aýyrmak gaty ýönekeý we geçen bahany ulanyp, degişli hyzmat funksiýasyna jaň edip, ep-esli manipulýasiýa talap etmeýär:
@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
   service.deleteNote(id);
   return "redirect:/";
}
Indi taýýar böleklere ownuk düzedişler girizeliň we “Bahar Data JPA” -da talap talaplaryny ulanyp, MySQL bilen gyzykly aragatnaşyga geçeliň, Dolandyryjy ýapylmazdan ozal ýönekeý süzgüçleri dolandyrmak funksiýasyny goşalyň.
@Controller
public class NoteController {

   private String sortDateMethod = "ASC";

   @GetMapping("/")
   public String list(Model model) {
       List<Note> notebook = filterAndSort();
       model.addAttribute("notes", notebook);
       model.addAttribute("sort", sortDateMethod);
       return "index";
   }

private List<Note> filterAndSort() {
   List<Note> notebook = null;
   switch (sortDateMethod) {
       case "ASC":
           notebook = service.findAllByOrderByDateAsc();
           break;
       case "DESC":
           notebook = service.findAllByOrderByDateDesc();
           break;
   }
   return notebook;
}

Gaty kiçi, ýöne gaty möhüm Talap.

Gymmatlyklary süzmek, garaşylýanlaryň tersine, tehniki tabşyrygy ýerine ýetirmekde başga bir büdremek bolup, sahypa sahypasy bilen kesgitlenen çylşyrymlylyk çägini ynam bilen ýeňip geçmek - maglumat massiwini belli bir ululykdaky aýratyn sahypalara bölmek. Ulatedygnanan ýadawlyk öz täsirini ýetirýän bolsa gerek, ýöne ... Ylham, Talap soraglary bilen düýbünden tötänleýin duşuşykdan soň geldi.
public interface NoteRepository extends JpaRepository<Note, Integer> {
   List<Note> findAllByOrderByDateAsc();
   List<Note> findAllByOrderByDateDesc();
}
Bahar maglumatlary JPA, maglumat kabul edilenden soň tertipleşdirmek zerurlygyny aradan aýyrýan we köp sanly amaly potensialyna eýe bolan ýokary granulaly maglumat bazasy talaplaryny döretmek mümkinçiligini berýär. Mysal üçin:
List<Note> findAllByOrderByDateAsc();
Bu usul SQL talaplaryna öwrüler we senesi boýunça (byDate) tertipleşdirilen (Asc) tertipleşdirilen ähli ýazgylary (findAll) görkezer. Mundan başga-da, bir talap bilen köp ugurlarda çylşyrymly kombinasiýalary döredip bilersiňiz. Aýdyň, senäniň bahasy (byDate) peselmegi üçin (byOrder) tamamlanan (byDoneTrue) ýazgylaryň hemmesini saýlaň:
Page<Note> findAllByDoneTrueOrderByDateDesc(Pageable pageable);

Netije ýa-da täze bir programmistiň başga bir boýun almagy

Hemmesi! “Shift + F10” kombinasiýasyny ulanyp ýa-da degişli nyşana basyp, web programmasyny arkaýyn açyp bilersiňiz. “Spring Boot” programmany “Apache Maven” -de gurar we ýerli “Apache Tomcat” serwerini ýerlihost: 8080-de gurar. Indi islendik brauzerdäki baglanyşygy yzarlamaly.
Bahar köwşüni ýeňmek - 6
Elbetde, beýleki iş talaplaryny ýerine ýetirmek üçin usulyýet dörediň. Programmanyň potensialy, döredijiniň tagallasy, ussatlygy we hyýaly bilen çäklenýär.
Bahar köwşüni ýeňmek - 7
Dogrusyny aýtsam we syýahat eden ýoluňyza üns berip, saýlanan ugruň dogrudygyna ýene-de bir gezek ynanýaryn we JavaRush bilim portalynda okamagyň peýdalaryna düşünýärin. Dürli amaly meseleleriň kömegi bilen şuňa meňzeş ýokary okuw mekdebiniň köne we geň galdyryjy içgysgynç programmasynda doly basylan programmirlemegi öwrenmäge bolan gyzyklanmany yzyna gaýtarmak mümkin boldy. Dört aýlap yzky tehnologiýa toplumynda materiallary işjeň öwrenmek, leksiýalara we laboratoriýa sapaklaryna gatnaşan ýyllar bilen deňeşdirilende has köp bilim sarp etdi. Ynan ýa-da ynanma. Çylşyrymly materiallara girmegiň kynçylyklaryna ýol bermezligiňizi isleýärin, sebäbi päsgelçilikleri ýeňip geçmek bilen has kämilleşýäris we hünär we şahsy taýdan ösýäris. Bu kiçijik hekaýa, “SpringBoot” atly ajaýyp guraly ulanmak üçin käbir täze pikirleri tapmaga kömek etdi diýip umyt edýärin. PS Github .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION