JavaRush /Java блогы /Random-KK /Conquest көктемгі аяқ киім
Surplus
Деңгей
Москва

Conquest көктемгі аяқ киім

Топта жарияланған
Қайырлы күн, құрметті оқырман! Сізбен танысқаныма қуаныштымын, тіпті әсем есім Spring Boot әзірлеуімен алғашқы танысу туралы қарапайым тақырыпты қарауға басты себеп болса да. Мен JavaRush порталында тағылымдамадан өтуге кіріспе тапсырмасын орындау тәжірибеммен бөліскім келеді, ол өзінің жинақталған білімінің күшін сынағысы келетін қарапайым техникалық университет студентінің шолуын ұсынғым келеді. Жаулап алу көктемгі етік - 1Мен қоса берілген codeта немесе ойлау әдісінде дөрекіліктің болуы мүмкін екенін ешбір жағдайда жоққа шығармаймын және мен сындарлы сынды құптаймын, өйткені бұл «төбешіктер мен көгерудің» арқасында кәсіби бағытта дамуға болады. Оның үстіне, мен берілген шарттарды шешуде өзімді «панацея» ретінде көрсетпеймін және бағдарламаның жеке фрагменттерін әдейі жіберіп алмаймын, бұл салыстырмалы түрде күрделі тақырыпқа кірудің негізгі маңыздылығын жүйке жүйесіне болмашы салдарсыз қалдырамын. Рас, анық нәрсені жоққа шығару абайсызда: бұл мен үшін қиын болды және белгілі бір сәтке дейін ештеңе анық болмады. Ал егер тапсырмамен бірінші кездесуден осындай сезімдерді сезінсеңіз, онда «Қош келдіңіз!» ThymeleafКіріс ақпарат массивін сүзу үшін шаблондық қозғалтқышты және queryжергілікті MySQL serverіне сұрауларды пайдалана отырып, тағылымдамадан өту тестінің жеңілдетілген ұқсастығын пайдаланып Spring Boot бағдарламасында веб-қосымшаны жазайық . Ендеше, бастайық!

Көктемгі аяқ киім. Бұл қандай жануар және оны қалай дайындау керек?

Қысқасы және қысқаша айтқанда, бұл қосымшаны жасау процесінде құнды уақытты үнемдеуге, үшінші тарап кітапханаларын тікелей қосу қажеттілігін жоюға, әсерлі картографиялық кенеп пен сервлеттерді жазуға арналған Pivotel -тің тамаша құралы. IntelliJ IDEA Ultimate Edition (Файл - Жаңа - Жоба... - Spring Initializr) біріктірілген немесе start.spring.io веб-қызметінде орналасқан , кең ауқымды қамтитын пакеттерді көрсететін Spring Initializr құрастырушысын пайдалану жеткілікті. ұсынады.
Жаулап алу көктемгі етік - 2
Алға қойылған техникалық сипаттамаларға сәйкес, MySQL дерекқорын пайдаланып қарапайым веб-қосымшаны жасау үшін стандартты джентльмен жиынтығын қолданамыз :
  • WEB веб-қосымшаны әзірлеуге арналған негізгі компонент, соның ішінде localhost:8080 стандартты мекенжайындағы жергілікті Apache Tomcat serverі және әмбебап Spring MVC құрылымы.

  • DevTools - құрастырылған codeта немесе үлгілерде өзгерістер анықталған кезде, ыстық JVM жүйесінде қолданбаны жылдам қайта іске қосу үшін қолданылады; Сонымен қатар, ол таңдалған қозғалтқыш жобаға қосылған болса, Thymeleaf кэшті тазалаудан босатады.

  • JPA дерекқорлармен жұмыс істеу үшін қажетті технология және Java нысандарының an objectілік қатынасты картасын қамтамасыз етеді, нысандарды басқару, сақтау және шығарып алу үшін API (біздің жағдайда күту режимі ) ұсынады.

  • Thymeleaf (Mustache, AngularJS, Vaadin және одан тыс) – қолданбаны визуализациялауға арналған үлгі қозғалтқышы; Html қағидаларымен салыстырмалы түрде таныс болғанымның арқасында мен тілді әлемнің ірге тасына итермелеген Thymeleaf-ті таңдадым.

  • MySQL - Java Database Connectivity драйверлерін дерекқорға қарсы SQL сұрауларын орындау үшін қосады.
Құрамдас бөліктерді түпкілікті таңдау және жасаудан кейін біз одан әрі толтыруға дайын каталогтары бар кәдімгі веб-қосымша архитектурасын аламыз. Көрнекі бөлікпен өзара әрекеттесу үшін фрагменттер, мейлі ол CSS графикалық стильдері, стандартты HTML беттері немесе JavaScript функционалдығы болсын, «ресурстарда» орналасуы керек, ал бэк-end компоненті, сәйкесінше, «java» ішінде орналастырылуы керек. Сондай-ақ, жоба құрылымын және құрамдас бөліктер арасындағы тәуелділіктерді сақтайтын түбірлік ауқымдағы pom.xml файлына назар аудару керек. Қосымша пакеттермен функционалдылықты одан әрі кеңейткіңіз келсе немесе қажетсіз заттарды алып тастағыңыз келсе, <dependencies></dependencies>ұқсас әдіс бойынша тегтер арасында манипуляцияларды орындау керек.
Жаулап алу көктемгі етік - 3

Үлкен болашаққа алғашқы қадамдар

Әрі қарай, өте қызықты және өте қисынды сұрақ туындайды: «Енді не істеу керек? Бұл қалай жұмыс істейді? Бағдарлама Model-View-Controller принциптеріне құрылған: ол қосылған деректер қорынан (Модель) an objectілерді оқуды ұйымдастырады және басқару элементтерімен (View) пайдаланушы интерфейсінде көрсетіледі; Құрамдас бөліктер арасындағы байланыс және жіберілген сұраныстарға сәйкес әрекеттерді орындау Контроллердің арқасында жүзеге асырылады. Бұл әрі қарай даму үшін анықтамалық нүкте ретінде қызмет ететін негізгі элементтерді құру. Тайғақ жолды болдырмас үшін және жұмыс орнында жолдастарыңыздың құрметін сақтау үшін компоненттерді тиісті каталогтарға орналастырыңыз (мысалы, Controller файлын «java» тармағындағы контроллерлер қалтасына орналастырыңыз) және мұқият сақтаңыз. жұмыс орнында тәртіп.

Мән – үлкен механизмдегі кішкене бөлік

Немесе басқаша айтқанда, мәселеде қойылған шарттарға сәйкес біздің Үлгіміз. Талқылау тақырыбынан шығып, кіріспе жобаға орала отырып, біз тапсырмалар арасында ең аз айырмашылықтар бар екенін сенімді түрде айта аламыз және одан әрі шолуда орташа тұжырымдаманы ұстанамыз. Айталық, дәптердегі ескертпелер, соның ішінде:
  • Жалпы ағындағы орынды анықтау үшін сәйкестендіру нөмірі;
  • Белгілі бір таңбалар санының мәтіндік хабарламасы;
  • Пайдаланушы оны жалпы тізімге қосқан күні;
  • «Дайын немесе орындалмады» («Оқылған немесе оқылмаған») анықтау үшін логикалық айнымалы.
Сондықтан, «an object» деп аталатын каталогта Ескертпе сыныбын жасап, сәйкес өрістерді қосамыз:
@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;
   }
}
Теориялық позициядан не болып жатқанын тереңірек түсіну үшін талқылау тақырыбынан тағы бір ауытқу. Көктемдегі компоненттер арасындағы байланыс annotationлармен - an objectілердің алдындағы арнайы көрсеткіштермен белгіленеді, олардың әрқайсысы механизмде белгілі бір рөл атқарады және «@» таңбасынан басталады. @Entity annotationсы Spring Boot бағдарламасына келесі сынып деректерінің "Entity" түріне жататынын көрсетеді, ал @Id және @GeneratedValue таңдалған өрісті ақпарат массивін өңдеу кезінде итераторды автоматты түрде жасау арқылы идентификатор ретінде көрсетеді. Көрнекі пішімнің ықшамдығын арттыру үшін стандартты Getter және Setter қосуды әдейі өткізіп жіберемін. Әрі қарай, жазбаларды сақтау үшін дерекқорды пайдалануды ескере отырып, біз қосымшаны әзірлеудің келесі қадамына көшеміз: біз «репозиторий» каталогында NoteRepository интерфейсін, алмасу тізбегіндегі байланыстырушы элементті жасаймыз және ең көп мұраға аламыз. қол жеткізу үшін сақталған нысанды және бүтін итераторды көрсететін әрі қарай жұмыс істеу үшін қолайлы репозиторий.
public interface NoteRepository extends JpaRepository<Note, Integer> {
}
Шындығында, бәрі осы. Қысқа және қысқаша. Енді Spring Boot дерекқормен өзара әрекеттесуді ұйымдастыру үшін құрылған құрамдас бөлікті пайдаланады. Әрекет ету әлеуеті әртүрлі бұрынғы репозитарийлердің салыстырмалы түрде көп түрлері бар. JpaRepository баспалдақтың жоғарғы жағында орналасқан және оның астындағы CrudRepository және PageAndSortingRepository қоса алғанда ең әлеуетке ие. Біз одан әрі бармаймыз және тақырыптан ауытқымаймыз, өйткені кейбір нәзіктіктерді техникалық құжаттамада Pivotel веб-сайтында табуға болады. Енді, деректер кескінін іске асырғаннан кейін және қолданба жағында байланыс әдістерін көрсеткеннен кейін, ресми әзірлеушіден жинақта жұмыс үстелі платформасында алдын ала орнатылған «MySQL Workbench» сәйкес сыртқы ортасында MySQL дерекқорын құруға назар аудару керек. жергілікті serverді құруға арналған қосымша пакеттермен:
Жаулап алу көктемгі етік - 4
Әрі қарай, негізгі терезеде ағымдағы жергілікті serverі бар белгішені басқаннан кейін ортаның нұсқауларын орындай отырып, біз нысанымыздың өрістеріне сәйкес кесте диаграммасын жасаймыз (Ескерту) және оны сәйкес деректермен толтырамыз. Қажетті нәтижеге сәтті жету үшін шұғыл түрде назар аударуды қажет ететін MySQL диалектінің нәзік жақтарын бөлек нақтылау қажет:
  • Жеке логикалық тип жоқ. Кез келген сұрауды өңдеу әрекеттері «шын» немесе «жалған» мәндерін тиісінше «1» немесе «0» бит мәніне түрлендіреді;
  • Күн толығымен Уақыт белгісі түрінде сақталады. Егер сіз өзегіне таныс Күнді қолдансаңыз, күнтізбедегі орынмен ғана шектелуге тура келеді.
Жаулап алу көктемгі етік - 5
Дайындық қадамдарын аяқтағаннан кейін құралдар тақтасындағы «найзағай» белгішесін басу арқылы деректерді жергілікті serverге жіберу үшін «MySQL Workbench» көрсетеміз. Енді ақпаратты қосу дұрыс аяқталса, ағымдағы дерекқор конфигурациясын application.properties (әдетте «ресурстар» каталогында орналасқан) қосу арқылы әзірлеуді жалғастыру үшін біз өзіміздің IDE-ге сенімді түрде орала аламыз:
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
Соңында ескертпе нысанын annotationлар арқылы MySQL-ге байланыстыру. @Table таңдалған аты мен схемасы бар кестені пайдалануды көрсетеді, ал @Column айнымалы мәндердің белгілі бір өріске жататынын көрсетеді.
@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;
   }
}

Көрініс немесе пайдаланушы интерфейсі

Өкінішке орай, біз мынаны сенімді түрде айта аламыз: «Қолданбаны визуализациялау теориялық немесе практикалық білімсіз негізгі кедергі болады». Шынымды айтсам, алдыңғы бөлік жұмыстың жалпы көлемінің таңғажайып көлемін алды және ұзақ уақыт бойы жүйкелерімді тоздырды. Бірақ Thymeleaf-тың таңғажайып қарапайымдылығының арқасында таңқаларлық жеңілістерден кейін қолайлы ымыраға келуге болады. Бұдан әрі талқылау таңдалған қозғалтқышты пайдаланудың күрделілігі туралы болады, дегенмен жалпы тұжырымдама ұқсас ұстанымды ұстанады. Негізгі әдіс - ең таза HTML-ді пайдалану және бірдей бөлімдердің бірнеше рет қайталануын болдырмау үшін жеке фрагменттерден соңғы дисплейді жинау мүмкіндігі. UI архитектурасы басқару элементтері бар шарлау жолағынан (жаңа жазба қосу, негізгі бетке оралу) және жазба өсу жолында (ASC) қосылған уақыт бойынша сұрыпталған нысандарды көрсетуге арналған динамикалық кестеден тұратын негізгі беттен тұрады делік. немесе азайту (DESC) бағыты.мағыналары. Стандартты позиция ретінде барлық жазбаларды өсу ретімен көрсетуді алайық. Таңдалған үлгі механизмінің иерархиялық саясатына сәйкес құрамдас визуализация элементтері «ресурстар» каталогындағы «үлгілер» тармағында орналасуы керек. Демек, құрамдастармен одан әрі манипуляциялар алға қойылған шарттарды ескереді. html5 үлгісінде «индекс» (немесе жеке қалауыңыз бойынша кез келген басқа атау) атауы бар негізгі бетті жасайық. Мысалы:
<!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>
Сонымен, соңғы қолданбаның негізгі компоненттерін бөліп көрейік. Thymeleaf proceduresаларды пайдалануды көрсету үшін бөлек синтаксисті пайдаланады және «th:» кілт сөзінен басталады, кітапханаға сілтеме міндетті түрде <html> ашу тегіне қосылады.
<div th:if="${not #lists.isEmpty(notes)}">
«Егер» операциясы әрекеттерді орындаудың әдеттегі тәсілінен мүлде ерекшеленбейді және одан әрі көрсету үшін кіріс «жазбалар» атрибутында нысандардың бар-жоғын тексереді. Модель мен визуализацияның өзара әрекеттесуін ұйымдастыру үшін оны пайдалануды ескере отырып, Контроллерді қолданумен тақырыптың қабаттасуын бөлек атап өткен жөн. Көптеген түсініксіз сәттер болашақта қалыптасады, егер қаласаңыз, оралыңыз.
<head th:replace="operations/list :: notebook"></head>
«Ауыстыру» операциясы ағымдағы немесе бөлек парақтан таңдалған фрагментпен «қоюды» немесе белсенді блокты ауыстыруды көрсетеді - соңғы жағдай мысалда анық байқалады. «Операциялар» каталогының «list.html» ішінен «блокнот» деп аталатын фрагментті «index» файлының <div></div> ішіне көшіріп, соңғы орындағы мазмұнды толығымен ауыстырамыз. Шығыс келесі мазмұнға ие:
<!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>
Конструктивті шолуға оралайық және стандартты HTML синтаксисін немесе пайдаланылатын графикалық стильдерді алып тастап, үлгі қозғалтқышының механизмін түсінуге ерекше назар аудара отырып, ретімен пайдаланылатын Thymeleaf функцияларын қарастырайық.
<div th:fragment="notebook">
«Фрагмент» операциясы фрагменттің атын анықтайды және «алмастыру» командасы үшін блоктың мазмұнын пайдалануға мүмкіндік береді. Оның үстіне! Бір беттің ішінде бірнеше рет қолдану ешбір жағдайда жоққа шығарылмайды, бұл қайтадан бағдарламалау тілдеріндегі proceduresалар немесе функциялармен ұқсастықты алға тартады.
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}">
@PostMapping annotationсына шақыру контроллерде “/sort/{sortDate}” салыстыруымен пайдаланылады, мұнда {sortDate} – шығыс сұрыптау бағыты төлсипаты. Итерация цикліндегі пайдаланушы таңдаған элементтің орнына байланысты динамикалық өзгерісті қосатын келесі блокта ұқсас нәрсені көруге болады:
<a th:href="@{'/edit/{id}'(id=${note.id})}">
<tr th:each="note : ${notes}">
Мәндерді санау Java синтаксисіндегі белгілі for блогын қолдануға өте ұқсас: айнымалы «note» ағымдағы элементті ${notes} енгізу төлсипатының массивінен — нысандар массивінен алады және мәндерді өзгерту үшін пайдаланылады. кейін. Шынымды айтсам, біз Thymeleaf мүмкіндіктерінің кең ауқымын практикалық қолдану мысалдарымен көрсетуге жеке мақала арнай аламыз - үлгі қозғалтқышы өте қарапайым және қосымша синтаксистің әсерлі багажын үйренуді қажет етпейді. Жоғарыда сипатталған функциялар әзірлеушілердің ресми веб-сайтындағы техникалық құжаттамада көрсетілген және бэк-эндпен байланысты ұйымдастыруда маңызды рөл атқарады. Сондықтан келесі және соңғы бөлікке сенімді түрде өтуге болады. Әрине, мақаланың соңында дайын қолданбаға сілтемеде визуализацияның қалған компоненттерін қосу арқылы.

Контроллер, шағын компаниядағы әкімші

«Веб-қосымшаның архитектурасындағы ірге тасы» - бағдарлама жұмысын ұйымдастырудағы Controller компонентінің маңыздылығының дәлірек сипаттамасын табудың ешқандай жолы жоқ шығар: операциялардың көпшілігі дәл компьютерлер арасындағы байланыстырушы элемент арқылы жүзеге асырылады. үлгі және көрініс. Spring Boot әрекет механикасының арқасында сіз карталау және GET/POST сұрау әдістерін азғантай проблемасыз сенімді түрде пайдалана аласыз және деректер репозиторийін автоматты түрде қоса аласыз. NoteController сыныбын «контроллерлер» каталогында бөлек файлда жасайық, қайтадан тиісті annotationны қолдануға сілтеме жасайық:
@Controller
public class NoteController {

   private NoteService service;

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

   @GetMapping("/")
   public String list(Model model) {
       return "index";
   }
}
Мұқият көздер дерекқорды басқару қызметімен жұмыс істеуден бизнес логикасын оқшаулау үшін қызметті қосумен байланысты қолданба архитектурасының дизайнындағы маңызды өзгерісті байқауы мүмкін. Аяқталған әрекеттер дайын өнімнің әмбебаптығын арттыру және деректер қорымен байланыс әдістерін өзгертуді қажет етпей, пайдаланушы интерфейсінің функционалдығын өзгерту үшін кең ауқымды қамтамасыз ету үшін қажет. Стандартты көрініс ешбір жағдайда ұқсастардың тобынан ерекшеленбейді: интерфейс жеке каталогта орналасқан және Spring Boot анықтау үшін @Service annotationсы бар класс арқылы жүзеге асырылады:
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();
   }
}
Контроллерді шолуға оралайық және Spring Boot әдістерін қолдана отырып жұмысты ұйымдастырудың қыр-сырын қарастырайық. @Autowired annotationсы қызметті сәйкес түрдегі көрсетілген айнымалыға автоматты түрде байланыстыру және дерекқормен байланыс орнату қажеттілігін көрсетеді. @GetMapping("/") annotationсымен көрсетілген көріністің байланысу тәсіліне көбірек назар аудару керек, ол localhost:8080-ге қоңырауды қабылдаған кезде «индекс» деп аталатын бетті қайтарады. Сіз @RequestMapping (мән = "/", әдіс = RequestMethod.GET) кеңейтілген сипаттаманы көрсете отырып немесе қайтару түрін дайын ModelAndView нұсқасымен ауыстыра отырып, басқа тәсілді пайдалана аласыз. Дегенмен, практикалық қолдану тәжірибесінің қазіргі жағдайына сәйкес, мен түпкілікті нәтижеде ешқандай іргелі айырмашылықтарды байқамаймын және әдеттегі опцияны қолданамын. Қосымша қойынды арқылы жаңа элементтерді қосу арқылы контроллерді кеңейтейік. Пайдаланушы шарлау жолағы элементін басқаннан кейін @GetMapping("/new") шақырылады және түймені пайдаланып енгізілген деректерді растау кезінде "хабарлама" деп аталатын параметрді қайтара отырып, "operations" каталогынан "жаңа" бетке қайта бағытталады. және негізгі блокқа қайта бағыттау. Енгізу терезесіндегі айнымалы атауының берілген мәннің атымен толық сәйкестігінің қажеттілігі ерекше атап өтуді қажет етеді.
<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:/";
}
Осыған ұқсас әдіс жазбаны жаңарту үшін қолданылады. Басқару элементін басқаннан кейін @GetMapping("/edit/{id}") салыстыру шақырылады және URL жолындағы идентификатор тасымалданады, әрі қарай өңдеуге арналған жазбамен "note" төлсипаты қосылады. @RequestParam(мән = "орындалды", қажет = өтірік) логикалық орындалды) нақты мәнді көрсету Thymeleaf үлгі механизмін пайдаланған кезде құсбелгіні пайдалануда маңызды рөл атқарады және әдепкі бойынша "жалған" күйіне орнатылады.
@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:/";
}
Дерекқордан элементтерді жою өте қарапайым және берілген мәнді пайдаланып сәйкес қызмет функциясын шақыру арқылы ешқандай маңызды манипуляцияны қажет етпейді:
@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
   service.deleteNote(id);
   return "redirect:/";
}
Енді дайын фрагменттерге кішігірім түзетулер енгізіп, Spring Data JPA жүйесіндегі сұрау сұрауларын пайдаланып, контроллерді жабу алдында қарапайым сүзуді басқару функциясын бөлек қоса отырып, MySQL-пен қызықты байланысқа көшейік.
@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;
}

Кішкентай, бірақ өте маңызды сұрау.

Мәндерді сүзгілеу, күткенге қарама-қайшы, беттеу арқылы белгіленген күрделілік шегін сенімді түрде еңсеру - одан әрі көрсету үшін деректер массивін белгілі бір өлшемдегі бөлек беттерге бөлу техникалық тапсырманы орындауда тағы бір кедергі болды. Сірә, жинақталған шаршау өз әсерін тигізді, бірақ... шабыт Сұрау сұрауларымен мүлдем кездейсоқ кездесуден кейін келді.
public interface NoteRepository extends JpaRepository<Note, Integer> {
   List<Note> findAllByOrderByDateAsc();
   List<Note> findAllByOrderByDateDesc();
}
Spring Data JPA ақпаратты алғаннан кейін сұрыптау қажеттілігін болдырмайтын және қолданбалы мүмкіндіктерінің кең ауқымына ие жоғары түйіршікті дерекқор сұрауларын жасау мүмкіндігін береді. Мысалы:
List<Note> findAllByOrderByDateAsc();
Әдіс SQL сұрауына түрлендіріледі және өсу ретімен (Asc) күні (күн бойынша) бойынша сұрыпталған барлық жазбаларды (findAll) көрсетеді. Сонымен қатар, күрделі комбинацияларды және бір талаппен көптеген өрістер бойынша үлгіні жасауға болады. Айтыңызшы, барлық (findAll) аяқталған (byDoneTrue) жазбаларды күн мәні бойынша (күн бойынша) азаю (азаю) ретімен (byOrder) таңдаңыз:
Page<Note> findAllByDoneTrueOrderByDateDesc(Pageable pageable);

Жаңадан келген бағдарламашының қорытындысы немесе басқа мойындауы

Барлық! Shift+F10 тіркесімін пайдаланып немесе сәйкес белгішені басу арқылы веб-қосымшаны қауіпсіз іске қосуға болады. Spring Boot бағдарламаны Apache Maven жүйесінде құрастырады және localhost:8080 мекенжайында жергілікті Apache Tomcat serverін орнатады. Енді кез келген браузердегі сілтемені орындау қажет.
Жаулап алу көктемгі етік - 6
Және, әрине, басқа да бизнес талаптарын орындау әдістемесін әзірлеу. Қолданбаның әлеуеті әзірлеушінің күш-жігерімен, тапқырлығымен және қиялымен шектеледі.
Жаулап алу көктемгі етік - 7
Шынымды айтсам және жүріп өткен жолға назар аудара отырып, мен таңдаған бағытымның дұрыстығына қайта-қайта көз жеткіземін және JavaRush білім порталында оқудың артықшылықтарын түсінемін. Түрлі практикалық тапсырмалардың арқасында ұқсас бағыттағы жоғары оқу орнының ескірген және таңқаларлық қызықсыз бағдарламасында толығымен басылған бағдарламалауды үйренуге деген тартымды қызығушылықты қайтару мүмкін болды. Төрт айлық материалды белсенді түрде оқып-үйренудің артқы технологиялық стектері лекциялар мен зертханалық сабақтарға қатысудың барлық жылдарымен салыстырғанда әлдеқайда көп білімді жұмсады. Сенсеңіз де, сенбесеңіз де. Күрделі материалды енгізу қиындықтарына берілмеуіңізді тілеймін, өйткені кедергілерді жеңу арқылы біз жақсырақ боламыз және кәсіби және жеке дамимыз. Бұл шағын оқиға маған SpringBoot деп аталатын таңғажайып құралды пайдаланудың жаңа идеяларын табуға көмектесті деп үміттенемін. PS Github .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION