Buna tuturor! În ultimul an, am învățat JavaScript pentru dezvoltarea web completă. Pentru o schimbare, am început să stăpânesc Java – puternicul limbaj orientat pe obiecte.

În acest caz, am găsit un cadru foarte curat și elegant numit Spring Boot pentru a construi un back-end.

Anterior, în dezvoltarea JavaScript, am folosit:

  1. Mongoose – un ORM (Object Relational Mapping) pentru Mongo DB
  2. Sequelize – un ORM pentru MySQL

Pentru dezvoltarea legată de Java, există multe tipuri de ORM Hibernate, JPA (Java Persistence API) & Interogare orientată pe obiecte Java.

Aleg să construiesc cu JPA care este folosit în mod tradițional în aplicațiile Java.

A fost foarte interesant și a durat aproximativ o săptămână să termin, deoarece am trebuit să învăț Spring Boot (Există o mulțime de adnotări „@”Și alte tipuri interesante de învățat), JPA și Hibernate pe parcurs.

Toată această magie este realizată în principal de către adnotări („@”Simbol) folosit în Spring Boot.

Crearea unui proiect Spring Boot Maven

Să creăm o aplicație Spring Boot Maven Project folosind aceasta legătură.

Maven”Este un instrument de gestionare a proiectelor utilizat pentru gestionarea managementului dependenței. Este la fel ca Node Package Manager (NPM) în mediul de dezvoltare JS.

Cum se construieste un API Rest cu Boot de primavara

Noi avem package.json în NodeJS pentru gestionarea dependenței și pom.xml în Spring Boot pentru gestionarea dependenței.

În grup, scrieți orice nume doriți. De obicei, numele de domeniu al organizației este scris de la dreapta la stânga.

De exemplu, numele nostru de domeniu este www.javaAPI.com, deci numele grupului ar putea fi com.javaAPI.www

Apoi, în tipul Artifact, numele folderului dorit.

În partea dreaptă, adăugați următoarele dependențe:

  1. WEB – Pentru a utiliza dependențele Spring (cadrul mai vechi al Spring Boot utilizat pentru dezvoltarea aplicațiilor web)
  2. JPA – Java Persistence API
  3. MYSQL

Apoi faceți clic pe „Generați proiectul”. Veți găsi un fișier rar – extrageți-l. Apoi deschideți acel folder în IDE-ul dvs. preferat.

1611168847 152 Cum se construieste un API Rest cu Boot de primavara

Faceți clic pe com.rest.API și veți găsi o ApiApplication.java înregistrați după cum urmează:

package com.rest.API;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
      SpringApplication.run(ApiApplication.class, args);
   }
}

Acest cod este suficient pentru a porni serverul. În mod normal, cizma de primăvară rulează localhost: 8080.

Tastați terminalul după cum urmează:

mvn spring-boot: rulați

Vedeți localhost-ul dvs. care rulează în browserul web la portul 8080. Pare gol, deoarece nu am făcut încă nimic.

Să explorăm fișierele și etichetele acestora

Dacă aruncați o privire asupra fișierului pom.xml, puteți observa că dependențele pe care le-ați introdus atunci când creați aplicația în Spring Initialize, cum ar fi MySQL, JPA și Web, vor fi în interiorul unui cy> tag.

1611168847 797 Cum se construieste un API Rest cu Boot de primavara

Dependențele de pornire și tester sunt nucleul pentru crearea aplicației Spring Boot pentru a fi difuzată pe server.

Acum, să trecem la APIApplication.java, care este fișierul principal.

package com.rest.API;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
      SpringApplication.run(ApiApplication.class, args);
   }
}

Aici numele pachetului este în prima linie a codului. Folosind acel nume de pachet, puteți importa orice clasă, metodă sau instanță într-un alt fișier de pachet.

După aceea, două module sunt importate din pachetul „org.springframework.boot”.

  1. SpringApplication
  2. SpringBootApplication

Deoarece boot-ul Spring este cel mai recent cadru de dezvoltare a aplicației Spring, are nevoie de pachetele Spring Application, precum și de pachetele sale specifice.

Dupa aceea @SpringBootApplication Se folosește adnotarea. Această adnotare constă în adnotare utilizată în primăvară:

  1. @Component – Spune compilatorului că următoarea clasă este o componentă care ar trebui inclusă la compilarea întregii aplicații.
  2. @ComponentScan – Acesta face scanarea pachetelor pe care le vom folosi în următoarea clasă Java.
  3. @EnableAutoConfiguration – permite mecanismului de autoconfigurare Spring Boot să importe module importante pentru executarea Spring Boot.

Acestea sunt adnotările utilizate pentru a porni aplicația Spring Boot pentru a rula pe un server.

Iată un articol despre care am scris Adnotare și utilizările lor în Java.

Să creăm Model pentru datele noastre

Să creăm o clasă Model pentru a salva, recupera, actualiza și șterge detaliile unei cărți.

Pentru asta, trebuie să creez un nou pachet numit model iar în interiorul acestuia creând un Book.java clasa pentru a-mi pune codul.

package com.rest.API.model;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
@Entity
@Table(name = "books")
public class Book {
    @Id
    @GeneratedValue
    private Long id;
@NotBlank
    private String book_name;
@NotBlank
    private String author_name;
@NotBlank
    private String isbn;
public Book(){
        super();
    }
public Book(Long id, String book_name, String author_name, String isbn) {
        super();
        this.id = id;
        this.book_name = book_name;
        this.author_name = author_name;
        this.isbn=isbn;
    }
public Long getId() {
        return id;
    }
public void setId(Long id) {
        this.id = id;
    }
public String getBook_name() {
        return book_name;
    }
public void setBook_name(String book_name) {
        this.book_name = book_name;
    }
public String getAuthor_name() {
        return author_name;
    }
public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }
public String getIsbn() {
        return isbn;
    }
public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
}

Aici folosesc JPA (Java Persistence API) care este o colecție de clase și metode de stocare continuă a datelor într-o bază de date.

@Entitate – folosit pentru a indica faptul că această clasă va fi o entitate din baza de date.

@Masa – care ia unele valori precum numele pe care urmează să-l numiți tabelul

@Id – indică faptul că ID-ul este cheia principală / cheia de identificare pentru acest tabel

@NotBlank – este folosit pentru a spune că aceste atribute nu trebuie să fie necompletate.

În afară de asta, există un constructor gol care are o super metodă pentru a satisface obiceiurile JPA. Metodele Getter și Setter sunt de obicei într-o clasă POJO (Obiect vechi Java simplu).

Crearea depozitului

Apoi, vom crea un repertoriu pachet pentru gestionarea bazei de date în Java.

Creați o interfață numită BookRepository.java în interiorul repertoriu pachet.

package com.rest.API.repository;
import com.rest.API.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}

Am importat JpaRepository pachet pentru a utiliza acel depozit în BookRepository interfață conectând cel mai recent model de carte codificat de făcut CRUD operațiuni.

Există deja metode încorporate în acele depozite pentru a efectua operații CRUD.

De exemplu:

.findAll() - to get All datas
.save()    - to save the got Data
.delete()  - to delete the data

În interiorul etichetei <> luăm numele modelului pe care urmează să îl folosim și tipul de date al cheii primare.

@Repertoriu: Adnotare utilizată pentru a indica DAO (Obiect de acces la date) componentă în stratul de persistență.

Îi spune compilatorului că interfața va folosi depozitul pentru a face activități în baza de date.

Crearea controlerului și gestionarea excepțiilor

Creați un pachet nou numit controlor, și în interior care creează un BookController.java fișier care conține punctele finale.

package com.rest.API.controller;

import com.rest.API.exception.BookNotFoundException;
import com.rest.API.model.Book;
import com.rest.API.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import javax.validation.Valid;
import java.util.List;

@RestController
public class BookController {

@Autowired
    BookRepository bookRepository;

// Get All Notes
    @GetMapping("/books")
    public List<Book> getAllNotes() {
        return bookRepository.findAll();
    }

// Create a new Note
    @PostMapping("/books")
    public Book createNote(@Valid @RequestBody Book book) {
        return bookRepository.save(book);
    }

// Get a Single Note
    @GetMapping("/books/{id}")
    public Book getNoteById(@PathVariable(value = "id") Long bookId) throws BookNotFoundException {
        return bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));
    }

// Update a Note
    @PutMapping("/books/{id}")
    public Book updateNote(@PathVariable(value = "id") Long bookId,
                           @Valid @RequestBody Book bookDetails) throws BookNotFoundException {

Book book = bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));

book.setBook_name(bookDetails.getBook_name());
        book.setAuthor_name(bookDetails.getAuthor_name());
        book.setIsbn(bookDetails.getIsbn());

Book updatedBook = bookRepository.save(book);

return updatedBook;
    }

// Delete a Note
    @DeleteMapping("/books/{id}")
    public ResponseEntity<?> deleteBook(@PathVariable(value = "id") Long bookId) throws BookNotFoundException {
        Book book = bookRepository.findById(bookId)
                .orElseThrow(() -> new BookNotFoundException(bookId));

bookRepository.delete(book);

return ResponseEntity.ok().build();
    }
}

Primul pachet importat este pentru excepția Book Not Found (pentru care vom crea un fișier într-un pic).

Explicația adnotărilor pe care le-am folosit aici:

  1. RestController: Această adnotare este utilizată pentru a indica fiecare metodă din clasa adnotată ca obiect de domeniu.

Deci, ce este obiectul de domeniu …?

Pur și simplu spune că obiectul de domeniu == obiect de afaceri.

Ele sunt de obicei reprezentate de entități și obiecte de valoare legate de punctul final pe care îl oferim pentru a obține datele din baza de date.

2. Autocablat: Această adnotare este utilizată pentru a conecta automat clasele de fasole.

Pentru asta, trebuie să știți despre „Ce este o clasă de fasole ..?

Practic, o clasă Java Bean este o clasă simplă care încapsulează multe obiecte în ea.

Acesta este un articol pe care am scris Clase Java Bean.

Următoarele sunt adnotările de mapare pentru punctele finale pentru a efectua operații CRUD.

3. GetMapping: Aceasta este o interfață care conține calea punctului final pentru a efectua o metodă Get. Această interfață GetMapping folosește interfața RequestMapping care poate avea metoda „cale, valoare, parametri, anteturi” pentru a efectua metoda Get în versiunile anterioare de primăvară.

Acum este simplificat prin utilizarea GetMapping.

4. PostMapping: Aceasta este o interfață care conține calea punctului final pentru a efectua metoda Post.

5. PutMapping: Aceasta este o interfață care conține calea punctului final pentru a efectua metoda Put to Update.

6. DeleteMapping: Aceasta este o interfață care conține calea punctului final pentru a efectua metoda Ștergere.

În ultimele rânduri, probabil că ați observat „ResponseEntity”Cuvânt cheie.

Ce este acea… ??

Este o clasă Java care moștenește HttpEntity pentru a manipula răspunsurile HTTP. Dacă solicitarea conexiunii este „O.K”Sau dacă există probleme, aruncați un excepție de la HttpEntity clasă.

sauElseThrow (): Aceasta este o metodă găsită în Clasă opțională în Java8 care a fost introdus pentru a face față excepțiilor. Clasa opțională oferă diverse metode de utilitate pentru a verifica prezența sau absența unui obiect, ceea ce ajută la gestionarea NullPointerException.

sauElseThrow este o metodă care returnează valoare dacă este prezentă, altfel invocă o excepție.

Crearea unei NotFoundException dacă nu există un astfel de book_id

Deoarece metoda orElseThrow lansează o excepție NotFound. Următoarea este partea de gestionare a excepțiilor. Creeaza o BookNotFoundException.java fișier din interiorul pachetului de excepții.

package com.rest.API.exception;
public class BookNotFoundException extends Exception {
private long book_id;
public BookNotFoundException(long book_id) {
        super(String.format("Book is not found with id : '%s'", book_id));
        }
}

Clasa creată extinde Superclasa de excepție. În constructor, trec book_id & imprimă excepția.

Deci asta este…

Am terminat partea REST API. Acum puteți construi aplicația (care a fost explicată în partea 1) și puteți efectua câteva testări cu Postman.

Conectarea cu baza de date MySql

În interiorul application.properties de dumneavoastră resurse dosar, adăugați următoarele:

## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url = jdbc:mysql://localhost:3306/library
spring.datasource.username = root //normally put your MySQL username 
spring.datasource.password = YOUR_MYSQL_PASSWORD
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

Asta e.

Am creat un API REST de bază în Spring Boot. Felicitări!

Dacă ceva nu este în regulă sau trebuie corectat, vă rugăm să ne anunțați în secțiunea de comentarii.

Luați legătura cu mine pe stare de nervozitate.

Codificare fericită!