Здравейте всички! През последната година изучавах JavaScript за уеб разработка с пълен стек. За промяна започнах да овладявам Java — мощният обектно-ориентиран език.
В този случай намерих много изчистена и елегантна рамка, наречена Spring Boot, за да създам заден край.
Преди това при разработката на JavaScript използвах:
- Mongoose — ORM (обектно релационно картографиране) за Mongo DB
- Sequelize — ORM за MySQL
За разработка, свързана с Java, има много ORM като Hibernate, JPA (Java Persistence API) и Обектно-ориентирано запитване на Java.
Избирам да изграждам с JPA, който традиционно се използва в Java приложения.
Беше много интересно и отне около една седмица, за да завърша, тъй като трябваше да науча Spring Boot (Има много пояснения „@ ” и други страхотни неща за научаване), JPA и Hibernate по пътя.
Цялата тази магия се извършва най-вече от анотациите („@ ” символ), използван в Spring Boot.
Създаване на проект Spring Boot Maven
Нека създадем приложение за Spring Boot Maven Project, използвайки тази връзка.
„Maven ” е инструмент за управление на проекти, използван за управление на управлението на зависимости. Това е точно като Node Package Manager (NPM ) в средата за разработка на JS.
Имаме package.json в NodeJS за управление на зависимости и pom.xml в Spring Boot за управление на зависимости.
В групата напишете името, което искате. Обикновено името на домейна на организацията се изписва отдясно наляво.
Например името на нашия домейн е www.javaAPI.com, така че името на групата може да бъде com.javaAPI.www
След това в артефакта въведете името на папката, която искате .
От дясната страна добавете следните зависимости:
- WEB — За използване на зависимостите на Spring (По-старата рамка на Spring Boot, използвана за разработване на уеб приложения)
- JPA — API за постоянство на Java
- MYSQL
След това щракнете върху „Генериране на проект“. Ще намерите rar файл - извлечете го. След това отворете тази папка в любимата си IDE.
Кликнете върху com.rest.API и ще намерите ApiApplication.java файл, както следва:
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);
}
}
Този код е достатъчен, за да стартирате вашия сървър. Обикновено пружинното зареждане работи на localhost:8080 .
Въведете терминала си, както следва:
mvn spring-boot:run
Вижте вашия локален хост, работещ в уеб браузъра на порт 8080. Изглежда празен, тъй като все още не сме направили нищо.
Нека разгледаме файловете и техните тагове
Ако погледнете файла pom.xml, може да забележите, че зависимостите, които сте поставили при създаването на приложението в Spring Initialize като MySQL, JPA и Web, ще бъдат вътре в
Зависимостта на стартера и тестера са ядрото за създаване на приложението Spring Boot, което да служи на сървъра.
Сега нека преминем към APIApplication.java, който е основният файл.
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);
}
}
Тук името на пакета е в първия ред на кода. Използвайки това име на пакета, можете да импортирате всеки клас, метод или екземпляри в друг пакетен файл.
След това два модула се импортират от пакета “org.springframework.boot”.
- Пролетно приложение
- SpringBootApplication
Тъй като Spring boot е най-новата рамка за разработка на приложения на Spring, тя се нуждае от пакетите на Spring Application, както и от неговите специфични пакети.
След това @SpringBootApplication Използва се анотация. Тази анотация се състои от анотация, която се използва в Spring:
- @Компонент — Казва на компилатора, че следният клас е компонент, който трябва да бъде включен при компилирането на цялото приложение.
- @ComponentScan — Този извършва сканирането на пакетите, които ще използваме в следния Java клас.
- @EnableAutoConfiguration — позволява на механизма за автоматично конфигуриране на Spring Boot да импортира важни модули за стартиране на Spring Boot.
Това са поясненията, използвани за стартиране на приложението Spring Boot, което да се изпълнява на сървър.
Ето една статия, която съм написал за анотациите и тяхното използване в Java.
Нека създадем модел за нашите данни
Нека създадем клас Model за запазване, извличане, актуализиране и изтриване на подробностите за книга.
За това трябва да създам нов пакет с име model и вътре в него създава Book.java клас, за да сложа моя код.
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;
}
}
Тук използвам JPA (Java Persistence API), който е колекция от класове и методи за непрекъснато съхраняване на данни в база данни.
@Entity — използва се за означаване, че този клас ще бъде обект в базата данни.
@Таблица — който приема някои стойности като името, с което ще дадете името на вашата таблица
@Id — обозначава, че идентификаторът е първичен ключ / идентификационен ключ за тази таблица
@NotBlank — се използва, за да каже, че тези атрибути не трябва да са празни.
Освен това има празен конструктор, който има супер метод за задоволяване на обичаите на JPA. Методите за получаване и настройка обикновено са в POJO клас (Обикновен стар Java обект ).
Създаване на хранилището
След това ще създадем хранилище пакет за управление на база данни в Java.
Създайте интерфейс, наречен BookRepository.java вътре в хранилището пакет.
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> {
}
Импортирах JpaRepository пакет, за да използвате това хранилище в BookRepository интерфейс, като свържа моя най-скоро кодиран модел Book, за да правя CRUD операции.
В тези хранилища вече има вградени методи за извършване на CRUD операции.
Напр.:
.findAll() - to get All datas
.save() - to save the got Data
.delete() - to delete the data
Вътре в маркера <> вземаме името на модела, което ще използваме, и типа данни на първичния ключ.
@Хранилище :Анотация, използвана за обозначаване на DAO (Обект за достъп до данни ) компонент в постоянния слой.
Той казва на компилатора, че интерфейсът ще използва хранилището за извършване на дейности с база данни.
Създаване на контролер и обработка на изключения
Създайте нов пакет, наречен контролер, и вътре в него създайте BookController.java файл, който съдържа крайните точки.
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();
}
}
Първият импортиран пакет е за изключението Book Not Found (за което ще създадем файл след малко).
Обяснение на анотациите, които използвахме тук:
- RestController: Тази анотация се използва за обозначаване на всеки метод в анотирания клас като обект на домейн.
И така, какво е обект на домейн...?
Той просто казва, че Domain Object ==Business Object.
Те обикновено са представени от обекти и стойностни обекти, свързани с крайната точка, която даваме, за да получим данните от базата данни.
2. Автоматично окабеляване :Тази анотация се използва за автоматично свързване на биб класовете.
За това трябва да знаете за „Какво е bean Class..? ”
По принцип Java Bean Class е прост клас, който капсулира много обекти в него.
Това е статия, която написах за Java Bean класове.
Следват анотациите за съпоставяне за крайните точки за изпълнение на CRUD операции.
3. GetMapping: Това е интерфейс който съдържа пътя на крайната точка за изпълнение на метод Get. Този интерфейс GetMapping използва интерфейса RequestMapping, който може да има метода „път, стойност, параметри, заглавки“ за изпълнение на метода Get в по-ранни версии на Spring.
Сега е опростено с помощта на GetMapping.
4. PostMapping :Това е интерфейс който съдържа пътя на крайната точка за изпълнение на метода Post.
5. PutMapping: Това е интерфейс който съдържа пътя на крайната точка за изпълнение на метода Put to Update.
6. Изтриване на картографиране: Това е интерфейс който съдържа пътя на крайната точка за изпълнение на метода Delete.
В последните редове вероятно сте забелязали „ResponseEntity ” ключова дума.
Какво е отоз …??
Това е Java клас, който наследява HttpEntity клас за манипулиране на HTTP отговорите. Дали заявката за връзка е „OK ” или ако има някакви проблеми, пуснете изключение от HttpEntity клас.
илиElseThrow(): Това е метод, намерен в Незадължителния клас в Java8 който беше въведен за обработка на изключения. Незадължителният клас предоставя различни помощни методи за проверка на присъствието или отсъствието на обект, което помага за справяне с NullPointerException.
orElseThrow е метод, който връща стойност, ако е налице, в противен случай извиква изключение.
Създаване на NotFoundException, ако няма такъв book_id
Методът As orElseThrow хвърля изключение NotFound. Следва частта за обработка на изключения. Създайте BookNotFoundException.java файл в пакета за изключения.
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));
}
}
Създаденият клас разширява Superclass of Exception. В конструктора предавам book_id и отпечатвам изключението.
И така, това е...
Завършихме частта за REST API. Сега можете да създадете приложението (което беше обяснено в част 1) и да направите някои тестове с Postman.
Свързване с MySql база данни
Вътре в application.properties от вашите ресурси папка, добавете следното:
## 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
Това е.
Изградихме основен REST API в Spring Boot. Поздравления!
Ако нещо не е наред или трябва да бъде коригирано, моля, уведомете ме в секцията за коментари.
Свържете се с мен в Twitter.
Приятно кодиране!