Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tạo Rest API với Spring Boot bằng MySQL và JPA

Chào mọi người! Trong năm qua, tôi đã học JavaScript để phát triển web đầy đủ. Để thay đổi, tôi bắt đầu thành thạo Java - Ngôn ngữ hướng đối tượng mạnh mẽ.

Trong trường hợp đó, tôi đã tìm thấy một khuôn khổ rất rõ ràng và trang nhã có tên là Spring Boot để xây dựng một back end.

Trước đây, trong quá trình phát triển JavaScript, tôi đã sử dụng:

  1. Mongoose - một ORM (Ánh xạ quan hệ đối tượng) cho Mongo DB
  2. Sequelize - một ORM cho MySQL

Để phát triển liên quan đến Java, có rất nhiều ORM như Hibernate, JPA (Java Persistence API) & Truy vấn hướng đối tượng Java.

Tôi chọn xây dựng bằng JPA thường được sử dụng trong các ứng dụng Java.

Nó rất thú vị và mất khoảng một tuần để hoàn thành vì tôi phải học Spring Boot (Có rất nhiều chú thích “ @ ”Và các loại nội dung thú vị khác để học), JPA và Hibernate trong quá trình thực hiện.

Tất cả điều kỳ diệu này hầu hết được thực hiện bởi chú thích (“ @ ”) Được sử dụng trong Spring Boot.

Tạo dự án Spring Boot Maven

Hãy tạo Ứng dụng dự án Spring Boot Maven bằng liên kết này.

Maven ”Là một công cụ quản lý dự án được sử dụng để quản lý quản lý sự phụ thuộc. Nó giống như Node Package Manager ( NPM ) trong môi trường phát triển JS.

Chúng tôi có package.json trong NodeJS để quản lý sự phụ thuộc và pom.xml trong Spring Boot để quản lý sự phụ thuộc.

Trong Nhóm, hãy viết bất cứ tên nào bạn muốn. Thông thường, tên miền của tổ chức được viết từ phải sang trái.

Ví dụ:tên miền của chúng tôi là www.javaAPI.com, vì vậy tên nhóm có thể là com.javaAPI.www

Sau đó, trong phần Tạo tác, nhập tên của thư mục bạn muốn .

Ở bên phải, thêm các phần phụ thuộc sau:

  1. WEB - Để sử dụng các phụ thuộc của Spring (Khung cũ hơn của Spring Boot được sử dụng để phát triển các ứng dụng web)
  2. JPA - Java Persistence API
  3. MYSQL

Sau đó nhấp vào “Tạo dự án”. Bạn sẽ tìm thấy một tập tin rar - hãy giải nén nó. Sau đó, mở thư mục đó trong IDE yêu thích của bạn.

Nhấp vào com.rest.API và bạn sẽ tìm thấy một ApiApplication.java tệp như sau:

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);
   }
}

Mã này đủ để khởi động máy chủ của bạn. Thông thường khởi động mùa xuân chạy trên localhost:8080 .

Nhập thiết bị đầu cuối của bạn như sau:

mvn spring-boot:run

Xem máy chủ cục bộ của bạn đang chạy trong trình duyệt web ở cổng 8080. Có vẻ trống vì chúng tôi chưa làm gì cả.

Hãy khám phá các tệp và thẻ của chúng

Nếu bạn đã xem tệp pom.xml, bạn có thể nhận thấy rằng các phần phụ thuộc bạn đưa vào khi tạo ứng dụng trong Spring Initialize như MySQL, JPA và Web sẽ nằm trong thẻ cy>.

Sự phụ thuộc của trình khởi động và trình thử nghiệm là cốt lõi để tạo Ứng dụng khởi động mùa xuân để phục vụ trên máy chủ.

Bây giờ, hãy chuyển sang APIApplication.java là tệp chính.

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);
   }
}

Ở đây, tên của gói nằm ở dòng đầu tiên của mã. Sử dụng tên gói đó, bạn có thể nhập bất kỳ lớp, phương thức hoặc phiên bản nào trong một tệp gói khác.

Sau đó, hai mô-đun được nhập từ gói “org.springframework.boot”.

  1. SpringApplication
  2. SpringBootApplication

Vì Spring boot là khung phát triển ứng dụng mới nhất của Spring nên nó cần các gói của Ứng dụng Spring cũng như các gói cụ thể của nó.

Sau đó @SpringBootApplication Chú thích được sử dụng. Chú thích này bao gồm chú thích được sử dụng trong Spring:

  1. @Component - Cho trình biên dịch biết rằng lớp sau là một thành phần cần được bao gồm khi biên dịch toàn bộ ứng dụng.
  2. @ComponentScan - Cái này thực hiện Quét gói nào chúng ta sẽ sử dụng trong lớp Java sau.
  3. @EnableAutoConfiguration - cho phép cơ chế tự động định cấu hình của Spring Boot để nhập các mô-đun quan trọng để Spring Boot chạy.

Đây là những chú thích được sử dụng để khởi động Ứng dụng Spring Boot chạy trên máy chủ.

Đây là một bài báo tôi đã viết về Annotation và công dụng của chúng trong Java.

Hãy tạo Mô hình cho dữ liệu của chúng tôi

Hãy tạo lớp Mô hình để lưu, truy xuất, cập nhật và xóa chi tiết của sách.

Đối với điều đó, tôi phải tạo một gói mới có tên model và bên trong tạo Book.java lớp để đặt mã của tôi.

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;
    }
}

Ở đây tôi đang sử dụng JPA (Java Persistence API), một tập hợp các lớp và phương thức để liên tục lưu trữ dữ liệu vào cơ sở dữ liệu.

@Entity - được sử dụng để biểu thị rằng lớp này sẽ là một Thực thể trong cơ sở dữ liệu.

@ Bảng - lấy một số giá trị như tên bạn sẽ đặt tên cho bảng của mình

@Id - biểu thị rằng id là khóa chính / khóa nhận dạng cho bảng này

@NotBlank - được sử dụng để nói rằng các thuộc tính này không được để trống.

Ngoài ra, có một hàm tạo rỗng có phương thức siêu để đáp ứng các quy định của JPA. Các phương thức getter và setter thường nằm trong một lớp POJO ( Đối tượng Java cũ thuần túy ).

Tạo kho lưu trữ

Tiếp theo, chúng tôi sẽ tạo kho lưu trữ gói để đối phó với quản lý cơ sở dữ liệu trong Java.

Tạo Giao diện có tên BookRepository.java bên trong kho lưu trữ gói hàng.

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> {
}

Tôi đã nhập JpaRepository gói để sử dụng hệ thống lưu trữ đó trong BookRepository giao diện bằng cách kết nối mô hình Sách được mã hóa gần đây nhất của tôi để thực hiện CRUD hoạt động.

Đã có các phương thức tích hợp sẵn trong các kho lưu trữ đó để thực hiện các hoạt động CRUD.

Vd:

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

Bên trong thẻ <>, chúng tôi sử dụng tên Model mà chúng tôi sẽ sử dụng và kiểu dữ liệu của khóa chính.

@Repository :Chú thích được sử dụng để chỉ ra DAO ( Đối tượng truy cập dữ liệu ) thành phần trong lớp bền bỉ.

Nó cho trình biên dịch biết rằng giao diện sẽ sử dụng Kho lưu trữ để thực hiện các hoạt động cơ sở dữ liệu.

Tạo Bộ điều khiển và Xử lý Ngoại lệ

Tạo một gói mới có tên là bộ điều khiển, bên trong tạo BookController.java tệp chứa các điểm cuối.

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();
    }
}

Gói được nhập đầu tiên dành cho ngoại lệ Sách Không tìm thấy (mà chúng tôi sẽ tạo tệp sau một chút).

Giải thích về các chú thích mà chúng tôi đã sử dụng ở đây:

  1. RestController: Chú thích này được sử dụng để biểu thị mọi phương thức trong lớp được chú thích là Đối tượng miền.

Vậy đối tượng miền là gì…?

Nó chỉ đơn giản nói rằng Đối tượng Miền ==Đối tượng Doanh nghiệp.

Chúng thường được đại diện bởi các thực thể và các đối tượng giá trị liên quan đến điểm cuối mà chúng tôi đang cung cấp để lấy dữ liệu từ cơ sở dữ liệu.

2. Không mong muốn :Chú thích này được sử dụng để xếp các lớp bean tự động.

Vì vậy, bạn cần biết về “ Lớp đậu là gì ..?

Về cơ bản, Java Bean Class là một lớp đơn giản đóng gói nhiều đối tượng vào đó.

Đây là một bài báo tôi đã viết trên Java Bean Classes.

Sau đây là Chú thích ánh xạ cho các điểm cuối để thực hiện Hoạt động CRUD.

3. GetMapping: Đây là giao diện trong đó chứa đường dẫn của điểm cuối để thực hiện phương thức Get. Giao diện GetMapping này sử dụng giao diện RequestMapping có thể có phương thức “đường dẫn, giá trị, tham số, tiêu đề” để thực hiện phương thức Get trong các phiên bản Spring trước đó.

Giờ đây, việc này được đơn giản hóa bằng cách sử dụng GetMapping.

4. PostMapping :Đây là giao diện chứa đường dẫn của điểm cuối để thực hiện phương thức Đăng.

5. PutMapping: Đây là giao diện chứa đường dẫn của điểm cuối để thực hiện phương thức Đặt để Cập nhật.

6. DeleteMapping: Đây là giao diện chứa đường dẫn của điểm cuối để thực hiện phương pháp Xóa.

Trong những dòng cuối cùng, bạn có thể nhận thấy “ ResponseEntity ”Từ khóa.

đó là gì … ??

Đây là một lớp Java kế thừa HttpEntity lớp để thao tác các phản hồi HTTP. Yêu cầu kết nối là “ OK ”Hoặc nếu có bất kỳ sự cố nào, hãy đưa ra một ngoại lệ từ HttpEntity lớp học.

orElseThrow (): Đây là một phương thức được tìm thấy trong Lớp tùy chọn trong Java8 được giới thiệu để xử lý các Ngoại lệ. Lớp tùy chọn cung cấp các phương thức tiện ích khác nhau để kiểm tra sự hiện diện hay vắng mặt của một đối tượng, giúp xử lý NullPointerException.

orElseThrow là một phương thức Trả về giá trị nếu có, nếu không sẽ gọi một ngoại lệ.

Tạo NotFoundException nếu không có book_id như vậy

Khi phương thức orElseThrow ném ra một ngoại lệ NotFound. Sau đây là phần Xử lý Ngoại lệ. Tạo BookNotFoundException.java tệp bên trong gói ngoại lệ.

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));
        }
}

Lớp được tạo sẽ mở rộng Lớp ngoại lệ Siêu lớp. Trong hàm tạo, tôi đang chuyển book_id và in ngoại lệ.

Vậy là xong…

Chúng ta đã hoàn thành phần REST API. Bây giờ bạn có thể xây dựng ứng dụng (đã được giải thích trong Phần 1) và thực hiện một số Thử nghiệm với Postman.

Kết nối với Cơ sở dữ liệu MySql

Bên trong application.properties trong số tài nguyên của bạn thư mục, thêm phần sau:

## 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

Thế là xong.

Chúng tôi đã xây dựng một API REST cơ bản trong Spring Boot. Xin chúc mừng!

Nếu có gì sai sót hoặc cần sửa chữa, vui lòng cho tôi biết trong phần bình luận.

Liên hệ với tôi trên twitter.

Chúc bạn viết mã vui vẻ!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truyền tham số vào dòng lệnh tập lệnh MySQL

  2. Cú pháp TẠO CƠ SỞ DỮ LIỆU SQL - Được DBMS liệt kê

  3. Lỗi khi tải Mô-đun MySQLdb 'Bạn đã cài đặt mysqlclient hay MySQL-python?'

  4. Cách chuyển từ MSSQL sang MySQL

  5. Cách tạo bảng tổng hợp động trong MySQL