JavaRush /Blog Jawa /Random-JV /Conquest Spring Boot
Surplus
tingkat
Москва

Conquest Spring Boot

Diterbitake ing grup
Sugeng dina, pembaca sing dikasihi! Lan seneng ketemu sampeyan, sanajan jeneng pompous minangka alesan utama kanggo nggoleki topik sing sederhana babagan kenalan pisanan karo pangembangan Spring Boot. Aku pengin nuduhake pengalaman ngrampungake tugas pambuka kanggo internship ing portal JavaRush, nampilake ringkesan saka sisih mahasiswa universitas teknis sing biasa sing pengin nyoba kekuwatan pengetahuan akumulasi. Conquest Spring Boot - 1Ora ana cara aku mbantah ana kemungkinan rudeness ing kode ditempelake utawa cara mikir, lan aku welcome kritik mbangun, amarga iku thanks kanggo "bumps lan bruises" iku bisa kanggo berkembang ing arah profesional. Kajaba iku, aku ora pura-pura dadi "panacea" kanggo ngrampungake kahanan sing diwenehake lan kanthi sengaja ngilangi fragmen individu saka program kasebut, ninggalake pentinge kanggo mlebu menyang topik sing relatif rumit tanpa ana akibat sing sithik kanggo sistem saraf. Iku bener, iku sembrono kanggo nolak ketok: iku hard kanggo kula lan pancen ora ana sing cetha nganti wayahe tartamtu. Lan yen sampeyan ngalami perasaan sing padha saka rapat pisanan karo tugas, banjur "Sugeng rawuh!" Ayo nulis aplikasi web ing Spring Boot nggunakake analogi sing disederhanakake saka tes mlebu magang nggunakake mesin template Thymeleaflan querypitakon menyang server MySQL lokal kanggo nyaring informasi sing mlebu. Dadi ayo miwiti!

Boot Spring. Kewan apa iku lan carane masak?

Ing cendhak lan concisely, iku alat banget saka Pivotel kanggo ngirit wektu terkenal ing proses nggawe aplikasi, mbusak perlu kanggo nyambung langsung perpustakaan pihak katelu, nulis kanvas pemetaan nyengsemaken lan servlets. Cukup nggunakake pembangun Spring Initializr , Integrasi menyang IntelliJ IDEA Ultimate Edition (File - New - Project... - Spring Initializr) utawa dumunung ing layanan web start.spring.io , nemtokake paket sing bakal kalebu saka macem-macem nawakake.
Conquest Spring Boot - 2
Sawise spesifikasi teknis sing diajukake, kita bakal nggunakake set gentleman, standar kanggo nggawe aplikasi web sing prasaja nggunakake database MySQL :
  • WEB minangka komponen utama kanggo ngembangake aplikasi web, kalebu server Apache Tomcat lokal ing alamat standar localhost:8080 lan kerangka Spring MVC universal.

  • DevTools - digunakake kanggo miwiti maneh aplikasi kanthi cepet ing JVM panas nalika owah-owahan dideteksi ing kode utawa cithakan sing dikompilasi; Kajaba iku, mbebasake Thymeleaf saka ngresiki cache yen mesin sing dipilih kalebu ing proyek kasebut.

  • JPA minangka teknologi sing dibutuhake kanggo nggarap database lan nyedhiyakake pemetaan obyek-relasional obyek Jawa, nyedhiyakake API ( Hibernate ing kasus kita) kanggo ngatur, nyimpen lan njupuk entitas.

  • Thymeleaf (Mustache, AngularJS, Vaadin lan liya-liyane) - mesin template kanggo visualisasi aplikasi; Thanks kanggo akrab karo prinsip html, aku milih Thymeleaf, sing nyurung basa kasebut menyang pojok jagad.

  • MySQL - nyambungake driver Konektivitas Database Java kanggo nglakokake pitakon SQL marang database.
Sawise pilihan pungkasan komponen lan nggawe, kita entuk arsitektur aplikasi web biasa kanthi direktori sing siap diisi maneh. Fragmen kanggo sesambungan karo bagean visual, dadi gaya grafis CSS, kaca HTML standar utawa fungsi JavaScript, kudu dumunung ing "sumber daya", lan komponen mburi-mburi, kudu diselehake ing "java". Kita uga kudu mbayar manungsa waé menyang file pom.xml ing sawetara ROOT, kang nyimpen struktur project lan dependensi antarane komponen. Yen sampeyan pengin luwih nggedhekake fungsi kanthi paket tambahan utawa mbusak barang sing ora perlu, sampeyan kudu nindakake manipulasi ing antarane tag <dependencies></dependencies>miturut cara sing padha.
Conquest Spring Boot - 3

Langkah pisanan menyang masa depan sing apik

Sabanjure, pitakonan sing rada menarik lan cukup logis muncul: "Apa sing kudu ditindakake saiki? Kepiye cara iki? Program iki dibangun ing prinsip Model-View-Controller: ngatur maca entitas saka database disambungake (Model) lan ditampilake ing antarmuka panganggo karo kontrol (View); komunikasi antarane komponen lan eksekusi tumindak miturut panjalukan ditularaké digawa metu thanks kanggo Controller. Iku nggawe unsur-unsur kunci sing dadi titik referensi kanggo pangembangan terus. Kanggo ngindhari slope sing lunyu lan njaga rasa hormat saka kanca-kanca ing lapangan kerja, sampeyan kudu nyelehake komponen ing direktori sing cocog (contone, selehake file Controller ing folder pengontrol ing cabang "java") lan simpen kanthi teliti. pesen ing papan kerja.

Esensi minangka bagean cilik ing mekanisme gedhe

Utawa kanthi tembung liyane, Model kita miturut kahanan sing disetel ing masalah kasebut. Mangkat saka topik diskusi lan bali menyang proyek pambuka, kita bisa kanthi yakin negesake manawa ana bedane minimal ing antarane tugas lan netepi konsep rata-rata ing review luwih lanjut. Contone, cathetan ing notebook, kalebu:
  • Nomer identifikasi kanggo nemtokake lokasi ing aliran umum;
  • Pesen teks saka sawetara karakter tartamtu;
  • Tanggal pangguna ditambahake menyang dhaptar umum;
  • Variabel Boolean kanggo nemtokake "Rampung utawa ora rampung" ("Waca utawa ora diwaca").
Mula, ayo nggawe kelas Cathetan ing direktori sing diarani "entitas" lan tambahake kolom sing cocog:
@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;
   }
}
Penyimpangan liyane saka topik diskusi kanggo pangerten luwih saka apa sing kedadeyan saka posisi teoretis. Sambungan antarane komponen ing Spring ditemtokake dening anotasi - penunjuk khusus ing ngarep obyek, sing saben-saben nduweni peran tartamtu ing mekanisme kasebut lan diwiwiti kanthi simbol "@". Anotasi @Entity nuduhake Spring Boot yen data kelas sakteruse kalebu "Entity", lan @Id lan @GeneratedValue nemtokake kolom sing dipilih minangka pengenal kanthi otomatis generasi iterator nalika ngolah macem-macem informasi. Aku sengaja ngilangi nambah Getter lan Setter standar kanggo nambah kompak saka format visual. Sabanjure, kanthi nggunakake database kanggo nyimpen rekaman, kita pindhah menyang langkah sabanjure ing pangembangan aplikasi: kita bakal nggawe antarmuka NoteRepository ing direktori "repositori", unsur sing nyambungake ing rantai ijol-ijolan, lan entuk warisan paling akeh. gudang cocok kanggo karya luwih, nuduhake entitas disimpen lan iterator integer kanggo ngakses.
public interface NoteRepository extends JpaRepository<Note, Integer> {
}
Bener, iku kabeh. Ringkes lan ringkes. Saiki Spring Boot bakal nggunakake komponen sing digawe kanggo ngatur interaksi karo database. Ana macem-macem jinis repositori warisan kanthi potensial tumindak sing beda-beda. JpaRepository ana ing ndhuwur tangga lan duweni potensi paling akeh, kalebu CrudRepository lan PageAndSortingRepository ing ngisor iki. Kita ora bakal luwih maju lan nyimpang saka topik kasebut, amarga sawetara subtleties bisa ditemokake ing situs web Pivotel ing dokumentasi teknis. Saiki, sawise ngetrapake gambar data lan nemtokake cara komunikasi ing sisih aplikasi, sampeyan kudu menehi perhatian kanggo nggawe database MySQL ing lingkungan eksternal sing cocog "MySQL Workbench", sing wis diinstal ing platform desktop ing perakitan saka pangembang resmi. karo paket tambahan kanggo nggawe server lokal:
Conquest Spring Boot - 4
Sabanjure, tindakake pandhuan lingkungan sawise ngeklik lambang karo server lokal saiki ing jendela utama, kita nggawe diagram tabel miturut kolom entitas kita (Cathetan) lan isi karo data sing cocog. Sampeyan kudu njlentrehake subtleties dialek MySQL kanthi kapisah, sing mbutuhake perhatian supaya bisa entuk asil sing dikarepake:
  • Ora ana jinis Boolean sing kapisah. Sembarang tumindak pangolahan panjalukan bakal ngowahi "bener" utawa "palsu" dadi nilai bit "1" utawa "0", mungguh;
  • Tanggal disimpen kabeh ing jinis Timestamp. Yen sampeyan nggunakake Tanggal, kang menowo kanggo inti, sampeyan kudu matesi dhewe mung posisi ing tanggalan.
Ngalahake Spring Boot - 5
Sawise rampung langkah-langkah persiapan, kita nuduhake "MySQL Workbench" kanggo ngirim data menyang server lokal kanthi ngeklik lambang "kilat" ing toolbar. Saiki, yen nambahake informasi wis rampung kanthi bener, kita bisa kanthi yakin bali menyang IDE asli kanggo nerusake pembangunan kanthi nambahake konfigurasi basis data saiki menyang application.properties (biasane ana ing direktori "sumber daya"):
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
Lan pungkasane ngiket entitas Cathetan menyang MySQL nggunakake anotasi. @Tabel nuduhake panggunaan tabel kanthi jeneng lan skema sing dipilih, lan @Column nuduhake yen variabel kasebut kalebu ing lapangan tartamtu.
@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;
   }
}

Tampilan utawa antarmuka panganggo

Alas, kita bisa kanthi aman ujar ing ngisor iki: "Visualisasi aplikasi bakal dadi sandhungan utama tanpa kawruh teoritis utawa praktis." Terus terang, komponen ngarep-mburi njupuk jumlah sing nggumunake saka total karya lan kanthi yakin ngrusak sarafku sajrone wektu sing suwe. Nanging amarga kesederhanaan Thymeleaf, sampeyan bisa nemokake kompromi sing cocog sawise sawetara kekalahan sing nggumunake. Dhiskusi luwih bakal babagan seluk-beluk nggunakake mesin sing dipilih, sanajan konsep umum manut posisi sing padha. Teknik utama yaiku kemampuan kanggo nggunakake HTML sing paling murni lan ngumpulake tampilan pungkasan saka fragmen individu kanggo ngindhari pirang-pirang pengulangan bagean sing padha. Ayo nganggep arsitektur UI kasusun saka kaca utama sing dumadi saka garis navigasi kanthi kontrol (nambah entri anyar, bali menyang kaca utama) lan tabel dinamis kanggo nampilake entitas sing diurutake nalika cathetan ditambahake ing munggah (ASC). utawa decrementing (DESC) arah. Ayo kita njupuk minangka posisi standar tampilan kabeh cathetan ing urutan munggah. Miturut kabijakan hirarkis mesin cithakan sing dipilih, unsur visualisasi komponen kudu ana ing cabang "templates" ing direktori "sumber daya". Akibate, manipulasi luwih lanjut karo komponen njupuk kondisi sing diterusake. Ayo nggawe kaca utama kanthi jeneng "indeks" (utawa jeneng liyane miturut preferensi pribadhi) ing cithakan html5. Tuladhane:
<!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>
Dadi, ayo ngrusak komponen utama aplikasi pungkasan. Thymeleaf nggunakake sintaks sing kapisah kanggo nuduhake panggunaan prosedur lan diwiwiti kanthi tembung kunci "th:", pranala menyang perpustakaan sing kudu kalebu ing tag <html> pambuka.
<div th:if="${not #lists.isEmpty(notes)}">
Operasi "yen" pancen ora beda karo cara sing biasa ditindakake lan mriksa atribut "cathetan" sing mlebu kanggo anane obyek kanggo tampilan luwih lanjut. Perlu disebutake kanthi kapisah tumpang tindih topik kanthi nggunakake Controller, kanthi nggunakake panggunaan kanggo ngatur interaksi model lan visualisasi. Akeh wektu sing ora jelas bakal kedadeyan ing mangsa ngarep, mung bali yen sampeyan pengin.
<head th:replace="operations/list :: notebook"></head>
Operasi "ngganti" nuduhake panggantos "stub" utawa blok aktif kanthi fragmen sing dipilih saka kaca sing saiki utawa kapisah - kasus terakhir katon kanthi jelas ing conto kasebut. Kita nyalin fragmen sing diarani "notebook" saka "list.html" saka direktori "operasi" menyang <div></div> file "indeks", kanthi lengkap ngganti konten ing tujuan pungkasan. Sing metu nduweni isi ing ngisor iki:
<!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>
Ayo bali menyang ringkesan konstruktif lan mbukak fungsi Thymeleaf sing digunakake kanthi urutan, ngilangi sintaks HTML standar utawa gaya grafis sing digunakake, lan fokus khusus kanggo mangerteni mekanisme mesin cithakan.
<div th:fragment="notebook">
Operasi "fragmen" nemtokake jeneng fragmen lan ndadekake bisa nggunakake isi blok kanggo printah "ngganti". Kajaba iku! Panggunaan kaping pirang-pirang ing kaca siji ora dikecualekake, maneh nggawa analogi karo prosedur utawa fungsi ing basa pamrograman.
<a th:href="@{'/sort/{sortDate}' (sortDate = 'ASC')}">
Telpon menyang anotasi @PostMapping digunakake ing Controller kanthi pemetaan "/ sort / {sortDate}", ing ngendi {sortDate} minangka atribut arah urut metu. Bab sing padha bisa dideleng ing blok ing ngisor iki, sing nambah owah-owahan dinamis gumantung saka posisi unsur sing dipilih pangguna ing loop pengulangan:
<a th:href="@{'/edit/{id}'(id=${note.id})}">
<tr th:each="note : ${notes}">
Nilai enumerasi meh padha karo panggunaan pamblokiran kanggo ing sintaks Jawa: variabel "cathetan" njupuk unsur saiki saka larik atribut input ${cathetan}—larik entitas—lan digunakake kanggo ngganti nilai. mengko. Terus terang, kita bisa ngaturake artikel sing kapisah kanggo nyathet macem-macem kapabilitas Thymeleaf kanthi conto aplikasi praktis - mesin cithakan gampang banget lan ora mbutuhake sinau babagan sintaks tambahan sing nggumunake. Fungsi sing diterangake ing ndhuwur kasebut ing dokumentasi teknis ing situs web resmi pangembang lan penting banget kanggo ngatur komunikasi karo mburi mburi. Mulane, sampeyan bisa kanthi yakin nerusake menyang bagean sabanjure lan pungkasan. Mesthi, kanthi masang komponen visualisasi sing isih ana ing tautan menyang aplikasi sing wis rampung ing pungkasan artikel.

Controller, administrator ing perusahaan cilik

"Batu pondasi ing arsitektur aplikasi web" - mbok menawa ora ana cara kanggo nemokake katrangan sing luwih akurat babagan pentinge komponen Controller ing ngatur karya program: umume operasi ditindakake kanthi tepat dening unsur panyambung antarane model lan tampilan. Thanks kanggo mekanika tumindak Spring Boot, sampeyan bisa kanthi yakin nggunakake pemetaan lan metode panyuwunan GET / POST tanpa masalah, lan nyambungake repositori data kanthi otomatis. Ayo nggawe kelas NoteController ing file sing kapisah ing direktori "pengontrol", maneh nuduhake panggunaan anotasi sing cocog:
@Controller
public class NoteController {

   private NoteService service;

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

   @GetMapping("/")
   public String list(Model model) {
       return "index";
   }
}
Mripat sing ati-ati bisa uga ngerteni owah-owahan penting ing desain arsitektur aplikasi sing digandhengake karo tambahan layanan kanggo ngisolasi logika bisnis saka nggarap layanan manajemen database. Tumindak sing wis rampung dibutuhake kanggo nambah fleksibilitas produk sing wis rampung lan nyedhiyakake ruang lingkup sing akeh kanggo ngganti fungsionalitas antarmuka pangguna tanpa mbutuhake owah-owahan cara komunikasi karo database. Perwakilan standar ora bisa ditemokake saka akeh sing padha: antarmuka dumunung ing direktori sing kapisah lan dileksanakake dening kelas kanthi anotasi @Service kanggo deteksi 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();
   }
}
Ayo bali maneh kanggo mriksa pengontrol lan deleng seluk-beluk ngatur karya nggunakake metode Spring Boot. Anotasi @Autowired nuduhake kabutuhan kanthi otomatis ngiket layanan menyang variabel tartamtu saka jinis sing cocog lan nggawe sambungan karo database. Perhatian liyane kudu dibayar kanggo cara tampilan komunikasi, dituduhake dening @GetMapping("/") anotasi, sing ngasilake kaca kanthi jeneng "indeks" nalika nampa telpon menyang localhost:8080. Sampeyan bisa nggunakake pendekatan sing beda, nemtokake gambaran lengkap @RequestMapping (nilai = "/", cara = RequestMethod.GET) utawa ngganti jinis bali karo ModelAndView siap-digawe. Nanging, miturut kahanan saiki pengalaman ing aplikasi praktis, aku ora sok dong mirsani beda dhasar ing asil final lan nggunakake pilihan biasanipun. Ayo dadi nggedhekake controller kanthi nambah unsur anyar nggunakake tab tambahan. Sawise pangguna ngeklik unsur garis navigasi, @GetMapping("/anyar") diarani lan dialihake menyang kaca "anyar" saka direktori "operasi", ngasilake parameter sing jenenge "pesen" nalika konfirmasi data sing dilebokake nggunakake tombol lan pangalihan menyang blok utama. Penyebutan khusus dibutuhake kanggo kabutuhan cocog lengkap jeneng variabel ing jendela input kanthi jeneng nilai sing ditransfer.
<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:/";
}
Teknik sing padha digunakake kanggo nganyari rekaman. Sawise ngeklik kontrol, pemetaan @GetMapping("/edit/{id}") diarani lan pengenal saka senar URL ditransfer, atribut "cathetan" ditambahake karo entri kanggo panyuntingan luwih lanjut. @RequestParam (nilai = "rampung", dibutuhake = palsu) boolean rampung) nemtokake nilai tartamtu muter peran tombol ing nggunakake kothak nalika nggunakake mesin Cithakan Thymeleaf lan disetel kanggo "palsu" minangka standar.
@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:/";
}
Mbusak item saka database gampang banget lan ora mbutuhake manipulasi sing signifikan kanthi nelpon fungsi layanan sing cocog nggunakake nilai sing dilewati:
@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
   service.deleteNote(id);
   return "redirect:/";
}
Saiki ayo nggawe pangaturan cilik kanggo pecahan sing wis rampung lan pindhah menyang komunikasi sing nyenengake karo MySQL nggunakake pitakon pitakon ing Spring Data JPA, kanthi kapisah nambahake fungsi kanggo ngatur panyaring prasaja sadurunge nutup Controller.
@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;
}

Dadi cilik, nanging penting Query.

Iku isin kanggo ngakoni, nyaring nilai, nalisir saka pangarepan, ternyata dadi sandhungan liyane ing nepaki tugas technical, kanthi yakin ngatasi ambang kerumitan ditetepake dening pagination - bejat munggah array data menyang kaca kapisah saka ukuran tartamtu kanggo tampilan luwih. Paling kamungkinan, kesel akumulasi njupuk tol, nanging... inspirasi teka sawise ketemu rampung sengaja karo pitakonan Query.
public interface NoteRepository extends JpaRepository<Note, Integer> {
   List<Note> findAllByOrderByDateAsc();
   List<Note> findAllByOrderByDateDesc();
}
Spring Data JPA nyedhiyakake kemampuan kanggo nggawe pitakon database kanthi granular sing ngilangi kabutuhan kanggo ngurutake informasi sawise ditampa lan duwe macem-macem potensial aplikasi. Tuladhane:
List<Note> findAllByOrderByDateAsc();
Cara kasebut bakal diowahi dadi query SQL lan nampilake kabeh cathetan (findAll) diurutake (byOrder) miturut tanggal (byDate) ing urutan munggah (Asc). Kajaba iku, sampeyan bisa nggawe kombinasi rumit lan conto ing pirang-pirang lapangan kanthi syarat siji. Ngomong, pilih kabeh (findAll) rampung (byDoneTrue) cathetan supaya (byOrder) mudhun (Decs) miturut nilai tanggal (byDate):
Page<Note> findAllByDoneTrueOrderByDateDesc(Pageable pageable);

Kesimpulan utawa pengakuan liyane saka programmer anyar

Kabeh! Sampeyan bisa mbukak aplikasi web kanthi aman nggunakake kombinasi Shift+F10 utawa kanthi ngeklik lambang sing cocog. Spring Boot bakal mbangun program ing Apache Maven lan nginstal server Apache Tomcat lokal ing localhost:8080. Saiki sampeyan mung kudu ngetutake link ing browser apa wae.
Conquest Spring Boot - 6
Lan, mesthi, ngembangake metodologi kanggo ngrampungake syarat bisnis liyane. Potensi aplikasi diwatesi kanthi usaha, kepinteran, lan imajinasi pangembang.
Conquest Spring Boot - 7
Dadi terus terang lan nggatekake dalan sing dilewati, aku bola-bali yakin karo arah sing dipilih lan entuk manfaat saka sinau ing portal pendidikan JavaRush. Thanks kanggo macem-macem tugas praktis, iku bisa kanggo bali kapentingan alluring ing program learning, kang wis rampung ditindhes ing program outdated lan kaget mboseni saka institusi pendidikan sing luwih saka arah padha. Patang sasi kanthi aktif sinau materi ing tumpukan teknologi mburi-mburi nandur modhal kawruh luwih akeh dibandhingake kabeh taun nekani kuliah lan kelas laboratorium. Percoyo opo ora. Aku pengin sampeyan ora menehi ing kangelan kanggo ngetik materi Komplek, amarga iku liwat ngatasi alangan sing kita dadi luwih apik lan berkembang profesional lan pribadi. Muga-muga crita cilik iki mbantu aku nemokake sawetara ide anyar kanggo nggunakake alat sing apik tenan sing diarani SpringBoot. PS Github .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION