JavaRush /Блоги Java /Random-TG /Пойафзоли баҳории фатҳ
Surplus
Сатҳи
Москва

Пойафзоли баҳории фатҳ

Дар гурӯҳ нашр шудааст
Рӯзи хуб, хонандаи азиз! Ва хеле хуш аст, ки бо шумо вохӯрам, ҳатто агар номи пурдабдаба сабаби асосии баррасии мавзӯи хоксорона дар бораи аввалин шиносоӣ бо рушди Spring Boot бошад. Ман мехоҳам таҷрибаи худро дар бораи анҷом додани супориши муқаддимавӣ барои таҷрибаомӯзӣ дар портали JavaRush мубодила кунам ва аз ҷониби як донишҷӯи комилан оддии донишгоҳи техникӣ, ки мехоҳад қувваи дониши ҷамъкардаи худро санҷад, шарҳ диҳам. Бутини баҳории фатҳ - 1Ман ба ҳеҷ ваҷҳ мавҷудияти эҳтимолии дағалӣ дар code ё усули тафаккури замимашударо инкор намекунам ва аз интиқоди созанда истиқбол мекунам, зеро маҳз ба шарофати "кӯзаҳо ва кӯфтаҳо" дар самти касбӣ инкишоф додан мумкин аст. Гузашта аз ин, ман умуман вонамуд намекунам, ки дар ҳалли шартҳои додашуда худро «панацея» вонамуд намекунам ва дидаву дониста порчаҳои алоҳидаи барномаро сарфи назар карда, аҳамияти асосии ворид шудан ба мавзӯи нисбатан мураккабро бе оқибатҳои хурдтарин барои системаи асаб боқӣ мемонам. Дуруст аст, ки инкор кардани чизи аён беэътиноӣ аст: ин барои ман душвор буд ва то лаҳзаи муайян ҳеҷ чиз равшан набуд. Ва агар шумо аз вохӯрии аввалин бо супориш эҳсосоти шабеҳро эҳсос кунед, пас "Хуш омадед!" Биёед бо истифода аз аналогияи соддакардашудаи санҷиши дохилшавӣ ба таҷрибаомӯзӣ бо истифода аз муҳаррики шаблон Thymeleafва queryдархостҳо ба serverи маҳаллии MySQL барои филтр кардани массиви воридотӣ як барномаи вебро дар Spring Boot нависед. Пас биёед оғоз кунем!

Пойгоҳи баҳорӣ. Ин чӣ гуна ҳайвон аст ва чӣ тавр онро пухтан мумкин аст?

Хулоса ва мухтасар, он як воситаи олиҷаноби Pivotel барои сарфаи вақти арзишманд дар раванди эҷоди барнома, аз байн бурдани зарурати пайвасти мустақими китобхонаҳои тарафи сеюм, навиштани рони таъсирбахши харитасозӣ ва сервлетҳо мебошад. Истифодаи созандаи Spring Initializr , ки ба IntelliJ IDEA Ultimate Edition (Файл - Нав - Лоиҳа... - Spring Initializr) дохил карда шудааст ё дар хидмати веби start.spring.io ҷойгир аст , ки бастаҳоро барои дохил кардани доираи васеи пешниҳод мекунад.
Бутини баҳории фатҳ - 2
Пас аз мушаххасоти техникии пешниҳодшуда, мо маҷмӯи гентельменро барои эҷоди як барномаи оддии веб бо истифода аз пойгоҳи додаҳои MySQL истифода мебарем :
  • WEB ҷузъи асосӣ барои таҳияи веб-барнома, аз ҷумла serverи маҳаллии Apache Tomcat дар суроғаи стандартии localhost:8080 ва чаҳорчӯбаи универсалии Spring MVC мебошад.

  • DevTools - барои зуд бозоғоз кардани барнома дар JVM-и гарм ҳангоми ошкор шудани тағирот дар code ё қолабҳои тартибдода истифода мешавад; Ғайр аз он, он Thymeleaf-ро аз тоза кардани кэш озод мекунад, агар муҳаррики интихобшуда ба лоиҳа дохил карда шавад.

  • JPA технологияест, ки барои кор бо пойгоҳи додаҳо зарур аст ва харитасозии an objectӣ-реляционии an objectҳои Java-ро таъмин мекунад, API ( Дар ҳолати мо Hibernate ) барои идора, ҳифз ва дарёфти an objectҳо таъмин мекунад.

  • Thymeleaf (Mustache, AngularJS, Vaadin ва берун аз он) - муҳаррики шаблон барои визуализатсияи барнома; Ба шарофати ошноии нисбии худ бо принсипҳои html, ман Thymeleaf-ро интихоб кардам, ки забонро ба санги гӯшаи ҷаҳон тела дод.

  • MySQL - драйверҳои Java Database Connectivity -ро барои иҷро кардани дархостҳои SQL бар зидди пойгоҳи додаҳо мепайвандад.
Пас аз интихоби ниҳоии ҷузъҳо ва эҷод, мо меъмории оддии веб-барнома мегирем, ки директорияҳо барои пур кардани минбаъда омодаанд. Фрагментҳо барои ҳамкорӣ бо қисми визуалӣ, хоҳ он сабкҳои графикии CSS, саҳифаҳои стандартии HTML ё функсияҳои JavaScript, бояд дар "манбаъҳо" ҷойгир шаванд ва ҷузъҳои пас аз он, мувофиқан дар "java" ҷойгир карда шаванд. Мо инчунин бояд ба файли pom.xml дар диапазони реша, ки сохтори лоиҳа ва вобастагии байни ҷузъҳоро нигоҳ медорад, диққат диҳем. Агар шумо хоҳед, ки функсияҳоро бо бастаҳои иловагӣ васеъ кунед ё чизҳои нолозимро тоза кунед, шумо бояд дар байни барчаспҳо <dependencies></dependencies>мувофиқи усули шабеҳ кор кунед.
Бутини баҳории фатҳ - 3

Қадамҳои аввалин ба ояндаи бузург

Баъдан, саволи хеле ҷолиб ва мантиқӣ ба миён меояд: «Ҳоло чӣ бояд кард? Ин чӣ гуна кор хоҳад кард? Барнома дар асоси принсипҳои Model-View-Controller сохта шудааст: он хондани an objectҳоро аз пойгоҳи додаҳои пайвастшуда (Модел) ташкил мекунад ва дар интерфейси корбар бо тугмаҳои идоракунӣ (View) намоиш дода мешавад; иртибот байни ҷузъҳо ва иҷрои амалҳо мувофиқи дархостҳои интиқолшуда ба шарофати Назоратчӣ анҷом дода мешавад. Ин эҷоди унсурҳои асосӣ мебошад, ки ҳамчун нуқтаи истинод барои рушди минбаъда хидмат мекунад. Барои роҳ надодан ба нишебии лағжиш ва нигоҳ доштани эҳтироми рафиқони худ дар соҳаи кор, шумо бояд ҷузъҳоро дар директорияҳои мувофиқ ҷойгир кунед (масалан, файли Controller-ро дар папкаи контроллерҳо дар шохаи “java” ҷойгир кунед) ва бодиққат нигоҳ доред. тартибот дар чои кор.

Моҳият як қисми хурди механизми калон аст

Ё ба ибораи дигар, Модели мо мувофиқи шартҳои дар масъала гузошташуда. Аз мавзӯи муҳокима ва баргаштан ба лоиҳаи муқаддимавӣ, мо метавонем бо итминон изҳор кунем, ки дар байни вазифаҳо фарқиятҳои ҳадди аққал мавҷуданд ва дар баррасии минбаъда ба консепсияи миёна риоя кунем. Биёед бигӯем, қайдҳо дар дафтар, аз ҷумла:
  • Рақами мушаххас барои муайян кардани ҷойгиршавӣ дар ҷараёни умумӣ;
  • Паёми матнии шумораи муайяни аломатҳо;
  • Санаи, ки корбар онро ба рӯйхати умумӣ илова кардааст;
  • Тағйирёбандаи булӣ барои муайян кардани "Иҷро шуд ё иҷро нашудааст" ("Хондан ё нахондан").
Аз ин рӯ, биёед дар директория бо номи "entity" синфи Note эҷод кунем ва майдонҳои мувофиқро илова кунем:
@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;
   }
}
Дигар инҳироф аз мавзӯи баҳс барои фаҳмиши бештари он чизе, ки аз мавқеи назариявӣ рӯй медиҳад. Пайвастагии байни ҷузъҳо дар фасли баҳор тавассути эзоҳҳо - ишоракунакҳои махсус дар назди an objectҳо муайян карда мешавад, ки ҳар кадоми онҳо дар механизм нақши мушаххас доранд ва бо аломати “@” оғоз мешаванд. Шарҳи @Entity ба Spring Boot нишон медиҳад, ки маълумоти синфҳои минбаъда ба "Entity" тааллуқ доранд ва @Id ва @GeneratedValue майдони интихобшударо ҳамчун идентификатор бо тавлиди худкори итератор ҳангоми коркарди массиви иттилоот муайян мекунанд. Ман дидаву дониста илова кардани Getter ва Setter-и стандартиро барои баланд бардоштани паймонии формати визуалӣ сарфи назар мекунам. Минбаъд, бо дарназардошти истифодаи пойгоҳи додаҳо барои нигоҳдории сабтҳо, мо ба қадами навбатии таҳияи барнома мегузарем: мо интерфейси NoteRepository-ро дар директорияи "анбор", унсури пайвасткунандаи занҷири мубодила эҷод мекунем ва аз ҳама бештар мерос мегирем. анбори мувофиқ барои кори минбаъда бо нишон додани an objectи захирашуда ва итератори бутун барои дастрасӣ.
public interface NoteRepository extends JpaRepository<Note, Integer> {
}
Дар асл, ҳамааш ҳамин аст. Мухтасар ва мухтасар. Акнун Spring Boot ҷузъи эҷодшударо барои ташкor ҳамкорӣ бо пойгоҳи додаҳо истифода хоҳад кард. Намудҳои нисбатан зиёди анборҳои меросӣ мавҷуданд, ки потенсиали гуногуни амал доранд. JpaRepository дар болои нардбон қарор дорад ва дорои потенсиали бештар, аз ҷумла CrudRepository ва PageAndSortingRepository дар зер аст. Мо дигар намеравем ва аз мавзӯъ дур намешавем, зеро баъзе нозукиҳоро дар вебсайти Pivotel дар ҳуҷҷатҳои техникӣ пайдо кардан мумкин аст. Акнун, пас аз татбиқи тасвири додаҳо ва муайян кардани усулҳои иртиботӣ дар тарафи барнома, шумо бояд ба эҷоди пойгоҳи додаҳои MySQL дар муҳити мувофиқи берунии "MySQL Workbench", ки дар платформаи мизи корӣ дар маҷмӯаи таҳиягари расмӣ пешакӣ насб карда шудааст, диққат диҳед. бо бастаҳои иловагӣ барои эҷоди serverи маҳаллӣ:
Пойафзоли баҳории фатҳ - 4
Минбаъд, бо риояи дастурҳои муҳити зист пас аз пахш кардани нишона бо serverи локалии ҷорӣ дар равзанаи асосӣ, мо мувофиқи майдонҳои an objectи худ диаграммаи ҷадвалро эҷод мекунем (Эзоҳ) ва онро бо маълумоти мувофиқ пур мекунем. Нозукиҳои лаҳҷаи MySQL-ро алоҳида равшан кардан лозим аст, ки барои бомуваффақият ба даст овардани натиҷаи дилхоҳ диққати фаврӣ талаб мекунанд:
  • Чунин намуди алоҳидаи булӣ вуҷуд надорад. Ҳама гуна амалҳои коркарди дархостҳо “ҳақиқӣ” ё “дурӯғ”-ро мутаносибан ба арзиши бит “1” ё “0” табдил медиҳанд;
  • Сана пурра дар намуди тамғаи вақт нигоҳ дошта мешавад. Агар шумо санаи ба асл шиносро истифода баред, шумо бояд худро танҳо бо мавқеъ дар тақвим маҳдуд кунед.
Бутини баҳорро фатҳ кардан - 5
Пас аз анҷоми ниҳоии қадамҳои омодагӣ, мо нишон медиҳем, ки "MySQL Workbench" -ро барои фиристодани маълумот ба serverи маҳаллӣ тавассути клик кардани тасвири "барқ" дар панели асбобҳо нишон медиҳем. Акнун, агар илова кардани маълумот дуруст анҷом дода шуда бошад, мо метавонем бо итминон ба IDE модарии худ баргардем, то рушдро бо илова кардани конфигуратсияи ҷории махзани маълумот ба application.properties (одатан дар феҳристи "манбаҳо" ҷойгир аст):
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
Ва ниҳоят бо истифода аз эзоҳҳо пайваст кардани ҷузъи ёддошт ба 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, пас аз як қатор мағлубиятҳои ҷолиб созиши мувофиқ пайдо кардан мумкин буд. Муҳокимаи минбаъда дар бораи нозукиҳои истифодаи муҳаррики интихобшуда хоҳад буд, гарчанде ки консепсияи умумӣ ба мавқеи шабеҳ мувофиқат мекунад. Техникаи асосӣ ин қобorяти истифодаи HTML-и тозатарин ва ҷамъ кардани намоиши ниҳоӣ аз порчаҳои алоҳида барои пешгирӣ кардани такрори сершумори қисмҳои якхела мебошад. Фарз мекунем, ки меъмории UI аз саҳифаи асосӣ иборат аст, ки аз сатри навигатсионӣ бо идоракунӣ (илова кардани вуруди нав, баргаштан ба саҳифаи асосӣ) ва ҷадвали динамикӣ барои намоиши an objectҳо, ки аз рӯи вақти илова шудани ёддошт ба болоравии (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 барои нишон додани истифодаи расмиёти алоҳида синтаксисро истифода мебарад ва бо калимаи калидии "th:" оғоз мешавад, ки пайванд ба китобхона бо он ҳатман дар теги кушодаи <html> дохил карда мешавад.
<div th:if="${not #lists.isEmpty(notes)}">
Амалиёти "агар" аз тарзи муқаррарии иҷрои корҳо комилан фарқ надорад ва атрибути воридотии "кайдҳо"-ро барои мавҷудияти an objectҳо барои намоиши минбаъда тафтиш мекунад. Бояд алоҳида қайд кард, ки такрори мавзӯъ бо истифодаи Controller бо назардошти истифодаи он барои ташкor ҳамкории модел ва визуализатсия. Бисёр лаҳзаҳои норавшан дар оянда шакл мегиранд, танҳо агар хоҳед, баргардед.
<head th:replace="operations/list :: notebook"></head>
Амалиёти "иваз кардан" иваз кардани "нота" ё блоки фаъолро бо порчаи интихобшуда аз саҳифаи ҷорӣ ё алоҳида нишон медиҳад - ҳолати охирин дар мисол ба таври равшан мушоҳида мешавад. Мо фрагментеро, ки «блокнот» ном дорад, аз «list.html»-и директорияи «амалиёти» ба <div></div>-и файли «index» нусхабардорӣ карда, мундариҷаро дар макони таъиноти ниҳоӣ пурра иваз мекунем. Нусхаи баромад дорои мундариҷаи зерин аст:
<!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>
Биёед ба шарҳи конструктивӣ баргардем ва аз функсияҳои Thymeleaf, ки бо тартиби истифодашуда истифода мешаванд, гузарем, аз синтаксиси стандартии HTML ё сабкҳои графикии истифодашуда сарфи назар карда, махсусан ба фаҳмидани механизми муҳаррики қолаб тамаркуз кунем.
<div th:fragment="notebook">
Амалиёти «фрагмент» номи фрагментро муайян мекунад ва имкон медихад, ки мазмуни блок барои фармони «иваз» истифода шавад. Гузашта аз ин! Истифодаи чандкарата дар дохor як саҳифа ба ҳеҷ ваҷҳ истисно карда намешавад, ки боз ҳам шабоҳатро бо расмиёт ё функсияҳо дар забонҳои барномасозӣ пеш мебарад.
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}">
Занг ба тавзеҳи @PostMapping дар Контроллер бо харитасозии "/sort/{sortDate}" истифода мешавад, ки дар он {sortDate} атрибути самти содиротӣ мебошад. Чизи шабеҳро дар блоки зерин дидан мумкин аст, ки вобаста ба мавқеи элементи аз ҷониби корбар интихобшуда дар ҳалқаи такрорӣ тағироти динамикӣ илова мекунад:
<a th:href="@{'/edit/{id}'(id=${note.id})}">
<tr th:each="note : ${notes}">
Рӯйхати арзишҳо ба истифодаи маъмули блоки for дар синтаксиси Java хеле монанд аст: тағирёбандаи "қайд" элементи ҷориро аз массиви атрибутҳои вуруди ${notes} - массиви an objectҳо мегирад ва барои тағир додани арзишҳо истифода мешавад. баъдтар. Рости гап, мо метавонем як мақолаи алоҳидаро барои номбар кардани доираи васеи қобorятҳои Thymeleaf бо мисолҳои татбиқи амалӣ бахшем - муҳаррики шаблон бениҳоят содда аст ва умуман омӯхтани бағоҷи таъсирбахши синтаксиси иловагиро талаб намекунад. Функсияҳои дар боло тавсифшуда дар ҳуҷҷатҳои техникӣ дар вебсайти расмии таҳиягарон нишон дода шудаанд ва дар ташкor иртибот бо пушти сар нақши калидӣ мебозанд. Аз ин рӯ, шумо метавонед бо боварӣ ба қисми оянда ва ниҳоӣ гузаред. Албатта, бо замима кардани ҷузъҳои боқимондаи визуализатсия дар истинод ба замимаи тайёр дар охири мақола.

Назоратчӣ, маъмур дар як ширкати хурд

"Санки асос дар меъмории замимаи веб" - шояд ҳеҷ роҳе барои дарёфти тавсифи дақиқи аҳамияти ҷузъи Controller дар ташкor кори барнома вуҷуд надошта бошад: аксари амалиётҳо маҳз тавассути унсури пайвасткунандаи байни барномаҳо анҷом дода мешаванд. модел ва манзара. Бо шарофати механикаи амали Spring Boot, шумо метавонед усулҳои дархости харитасозӣ ва GET/POST-ро бидуни мушкorи хурдтарин истифода баред ва ба таври худкор анбори додаҳоро пайваст кунед. Биёед синфи NoteController-ро дар як файли алоҳида дар директорияи "контроллерҳо" эҷод кунем, боз бо истинод ба истифодаи эзоҳи мувофиқ:
@Controller
public class NoteController {

   private NoteService service;

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

   @GetMapping("/")
   public String list(Model model) {
       return "index";
   }
}
Чашми бодиққат метавонад тағироти муҳими тарҳрезии меъмории барномаро, ки бо илова кардани хидмат барои ҷудо кардани мантиқи тиҷорат аз кор бо хидмати идоракунии пойгоҳи додаҳо алоқаманд аст, мушоҳида кунад. Амалҳои анҷомдодашуда барои баланд бардоштани универсалии маҳсулоти тайёр ва фароҳам овардани доираи васеъ барои тағир додани функсияи интерфейси корбар бидуни тағир додани усулҳои иртибот бо пойгоҳи додаҳо заруранд. Намоиши стандартӣ ба ҳеҷ ваҷҳ аз анбӯҳи якхела фарқ намекунад: интерфейс дар феҳристи алоҳида ҷойгир аст ва аз ҷониби синф бо шарҳи @Service барои ошкоркунии Spring Boot амалӣ карда мешавад:
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();
   }
}
Биёед ба баррасии назорат баргардем ва ба нозукиҳои ташкor кор бо усулҳои Spring Boot назар кунем. Тавсифи @Autowired зарурати ба таври худкор пайваст кардани хидматро ба тағирёбандаи мушаххаси навъи мувофиқ ва пайвастшавӣ бо пойгоҳи додаҳо нишон медиҳад. Диққати бештар ба тарзи муоширати намоиш дода мешавад, ки бо шарҳи @GetMapping("/") нишон дода шудааст, ки ҳангоми қабули занг ба localhost:8080 саҳифа бо номи "index" бармегардад. Шумо метавонед як равиши дигарро истифода баред, тавсифи васеътари @RequestMapping (арзиш = "/", метод = RequestMethod.GET) ё иваз кардани навъи бозгашт бо модели тайёри ModelAndView. Аммо, мувофиқи ҳолати кунунии таҷриба дар татбиқи амалӣ, ман дар натиҷаи ниҳоӣ ягон фарқияти асосиро мушоҳида намекунам ва варианти муқаррариро истифода мебарам. Биёед контроллерро тавассути илова кардани унсурҳои нав бо истифода аз ҷадвали иловагӣ васеъ кунем. Пас аз он ки корбар ба унсури сатри навигатсионӣ клик кунад, @GetMapping("/new") даъват карда мешавад ва ба саҳифаи "нав" аз директорияи "амалиёти" равона карда мешавад ва ҳангоми тасдиқи маълумоти воридшуда бо истифода аз тугма параметреро бо номи "паём" бармегардонад. ва ба блоки асосӣ равона кардан. Зарурати мувофиқати пурраи номи тағирёбанда дар равзанаи вуруд бо номи арзиши интиқол зикри махсусро талаб мекунад.
<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 интиқол дода мешавад, атрибути "найд" бо сабт барои таҳрири минбаъда илова карда мешавад. @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:/";
}
Акнун биёед ба порчаҳои анҷомшуда ислоҳоти хурд ворид кунем ва ба муоширати ҳаяҷонбахш бо MySQL бо истифода аз дархостҳои дархост дар Spring Data JPA гузарем ва ба таври ҷудогона функсияи идоракунии филтри оддӣ пеш аз пӯшидани контроллер илова кунем.
@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;
}

Саволи хеле хурд, вале хеле муҳим.

Эътироф кардан, филтр кардани арзишҳо, бар хилофи интизориҳо, боз як монеаи дигар дар иҷрои вазифаи техникӣ, бо боварӣ бартараф кардани ҳадди мураккабии тавассути саҳифабандӣ муқарраршуда - тақсим кардани массиви маълумот ба саҳифаҳои алоҳидаи андозаи муайян барои намоиши минбаъда табдил ёфт. Эҳтимол, хастагии ҷамъшуда зараровар буд, аммо... илҳом пас аз вохӯрии комилан тасодуфӣ бо дархостҳои Query омад.
public interface NoteRepository extends JpaRepository<Note, Integer> {
   List<Note> findAllByOrderByDateAsc();
   List<Note> findAllByOrderByDateDesc();
}
Spring Data JPA имкон медиҳад, ки дархостҳои махзани маълумотҳои хеле гранулӣ эҷод кунад, ки зарурати ҷудо кардани иттилоотро пас аз гирифтани он аз байн мебарад ва дорои доираи васеи потенсиали барномавӣ мебошад. Барои намуна:
List<Note> findAllByOrderByDateAsc();
Усул ба дархости SQL табдил дода мешавад ва ҳама сабтҳоро (findAll) аз рӯи сана (аз рӯи сана) бо тартиби афзоиш (Asc) мураттаб карда нишон медиҳад. Ғайр аз он, шумо метавонед бо як талабот комбинатсияҳои мураккаб эҷод кунед ва дар бисёр соҳаҳо намуна гиред. Бигӯед, ҳамаи сабтҳои (findAll) анҷомёфтаро (byDoneTrue) бо тартиби (byOrder) кам кардани (Дек) аз рӯи арзиши сана (byDate) интихоб кунед:
Page<Note> findAllByDoneTrueOrderByDateDesc(Pageable pageable);

Хулоса ё эътирофи дигари барномасози навкор

Ҳама! Шумо метавонед веб-барномаро бо истифода аз комбинатсияи Shift+F10 ё ба воситаи ангуштзании тасвири мувофиқ ба таври бехатар оғоз кунед. Spring Boot барномаро дар Apache Maven месозад ва serverи маҳаллии Apache Tomcat-ро дар localhost:8080 насб мекунад. Акнун ба шумо танҳо лозим аст, ки истинодро дар ҳама гуна браузер пайравӣ кунед.
Пойафзоли баҳории фатҳ - 6
Ва, албатта, таҳияи методология барои иҷрои дигар талаботи тиҷорат. Потенсиали барнома бо саъю кӯшиш, қобorят ва тасаввуроти таҳиягар маҳдуд аст.
Пойафзоли баҳории фатҳ - 7
Бо ошкоро будан ва таваҷҷуҳ ба роҳи тайшуда, ман гаштаву баргашта ба дурустии самти интихобшуда боварӣ дорам ва бартариҳои таҳсил дар портали таълимии JavaRushро дарк мекунам. Ба шарофати иҷрои вазифаҳои гуногуни амалӣ, имкон пайдо шуд, ки таваҷҷӯҳи ҷолиб ба омӯзиши барномасозӣ, ки дар барномаи кӯҳна ва ҳайратангези дилгиркунандаи як муассисаи таҳсилоти олии як самти шабеҳ комилан пахш карда шуда буд, баргардонида шавад. Чаҳор моҳи омӯзиши фаъолонаи мавод дар стеки технологӣ дар муқоиса бо тамоми солҳои иштирок дар лексияҳо ва дарсҳои лабораторӣ дониши бештарро сарф кард. Бовар кунед ё не. Орзу дорам, ки ба душворихои дохил шудани материалхои мураккаб таслим нашавед, зеро махз тавассути бартараф намудани монеахо мо бехтар мешавем ва аз чихати касбй ва шахсй инкишоф меёбем. Ман умедворам, ки ин ҳикояи хурд ба ман кӯмак кард, ки идеяҳои навро барои истифодаи асбоби аҷибе бо номи SpringBoot пайдо кунам. PS Github .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION