Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara membangun Rest API dengan Spring Boot menggunakan MySQL dan JPA

Halo semuanya! Selama setahun terakhir, saya telah mempelajari JavaScript untuk pengembangan web full-stack. Untuk perubahan, saya mulai menguasai Java — Bahasa Berorientasi Objek yang kuat.

Dalam hal ini, saya menemukan kerangka kerja yang sangat bersih dan elegan yang disebut Spring Boot untuk membangun bagian belakang.

Sebelumnya, dalam pengembangan JavaScript, saya menggunakan:

  1. Luwak — sebuah ORM (Pemetaan Relasional Objek) untuk DB Mongo
  2. Sekuel — sebuah ORM untuk MySQL

Untuk pengembangan terkait Java, ada banyak ORM seperti Hibernate, JPA (API Persistensi Java) &Kueri Berorientasi Objek Java.

Saya memilih untuk membangun dengan JPA yang secara tradisional digunakan dalam aplikasi Java.

Sangat menarik, dan membutuhkan waktu sekitar satu minggu untuk menyelesaikannya karena saya harus mempelajari Spring Boot (Ada banyak anotasi “@ ” dan hal-hal keren lainnya untuk dipelajari), JPA, dan Hibernate di sepanjang jalan.

Semua keajaiban ini sebagian besar dilakukan oleh anotasi (“@ ” simbol) yang digunakan di Spring Boot.

Membuat Proyek Spring Boot Maven

Mari buat Aplikasi Proyek Spring Boot Maven menggunakan tautan ini.

Maven ” adalah alat manajemen proyek yang digunakan untuk mengelola manajemen ketergantungan. Ini seperti Pengelola Paket Node (NPM ) di lingkungan pengembangan JS.

Kami memiliki package.json di NodeJS untuk manajemen ketergantungan dan pom.xml di Spring Boot untuk manajemen ketergantungan.

Di Grup, tulis nama apa pun yang Anda inginkan. Biasanya, nama domain organisasi ditulis dari kanan ke kiri.

Misal nama domain kita adalah www.javaAPI.com, jadi nama grupnya bisa com.javaAPI.www

Kemudian di Artifact ketik nama folder yang Anda inginkan .

Di sisi kanan, tambahkan dependensi berikut:

  1. WEB — Untuk menggunakan dependensi Spring (Kerangka Spring Boot yang lebih lama digunakan untuk mengembangkan aplikasi web)
  2. JPA — API Persistensi Java
  3. MYSQL

Kemudian klik "Hasilkan Proyek". Anda akan menemukan file rar — ekstrak. Kemudian buka folder tersebut di IDE favorit Anda.

Klik com.rest.API dan Anda akan menemukan ApiApplication.java file sebagai berikut:

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

Kode ini cukup untuk memulai server Anda. Biasanya booting pegas berjalan di localhost:8080 .

Ketik terminal Anda sebagai berikut:

mvn spring-boot:run

Lihat localhost Anda berjalan di browser web pada port 8080. Tampilannya kosong karena kami belum melakukan apa pun.

Mari kita jelajahi file dan tagnya

Jika Anda melihat file pom.xml, Anda mungkin memperhatikan bahwa dependensi yang Anda masukkan saat membuat aplikasi di Spring Initialize seperti MySQL, JPA, dan Web akan berada di dalam cy> tag.

Ketergantungan starter dan penguji adalah inti untuk membuat Aplikasi Boot Musim Semi untuk ditayangkan di server.

Sekarang, mari kita pindah ke APIApplication.java yang merupakan file utama.

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

Di sini nama paket ada di baris pertama kode. Dengan menggunakan nama paket itu, Anda dapat mengimpor kelas, metode, atau instance apa pun di file paket lain.

Setelah itu, dua modul diimpor dari paket “org.springframework.boot”.

  1. Aplikasi Musim Semi
  2. Aplikasi SpringBoot

Karena Spring boot adalah kerangka kerja pengembangan aplikasi terbaru dari Spring, ia memerlukan paket-paket Aplikasi Spring serta paket-paket spesifiknya.

Setelah itu @SpringBootApplication Anotasi digunakan. Anotasi ini terdiri dari anotasi yang digunakan di Spring:

  1. @Komponen — Memberi tahu kompiler bahwa kelas berikut adalah komponen yang harus disertakan saat mengompilasi seluruh aplikasi.
  2. @ComponentScan — Yang ini melakukan Pemindaian paket mana yang akan kita gunakan di kelas Java berikut.
  3. @EnableAutoConfiguration — mengaktifkan mekanisme konfigurasi otomatis Spring Boot untuk mengimpor modul penting agar Spring Boot dapat dijalankan.

Ini adalah anotasi yang digunakan untuk memulai Aplikasi Boot Musim Semi agar berjalan di server.

Berikut adalah artikel yang saya tulis tentang Anotasi &kegunaannya di Java.

Mari kita buat Model untuk data kita

Mari buat kelas Model untuk menyimpan, mengambil, memperbarui, dan menghapus detail buku.

Untuk itu, saya harus membuat paket baru bernama model dan di dalamnya membuat Book.java kelas untuk memasukkan kode saya.

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

Disini saya menggunakan JPA (Java Persistence API) yang merupakan kumpulan class dan method untuk menyimpan data secara terus menerus ke dalam database.

@Entitas — digunakan untuk menunjukkan bahwa kelas ini akan menjadi Entitas dalam database.

@Tabel — yang mengambil beberapa nilai seperti nama yang akan Anda beri nama tabel Anda

@Id — menunjukkan bahwa id adalah kunci utama / kunci pengenal untuk tabel ini

@NotBlank — digunakan untuk mengatakan bahwa atribut ini tidak boleh kosong.

Selain itu ada konstruktor kosong yang memiliki metode super untuk memenuhi kebiasaan JPA. Metode pengambil dan penyetel biasanya dalam kelas POJO (Objek Java lama biasa ).

Membuat Repositori

Selanjutnya, kita akan membuat repositori paket untuk menangani manajemen database di Java.

Buat Antarmuka yang disebut BookRepository.java di dalam repositori paket.

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

Saya telah mengimpor JpaRepository paket untuk menggunakan repositori itu di BookRepository antarmuka dengan menghubungkan model Buku kode terbaru saya untuk melakukan CRUD operasi.

Sudah ada metode bawaan di repositori tersebut untuk melakukan operasi CRUD.

Misal:

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

Di dalam tag <> kita mengambil nama Model yang akan kita gunakan dan tipe data Primary key.

@Repositori :Anotasi yang digunakan untuk Menunjukkan DAO (Objek Akses Data ) komponen di lapisan persistensi.

Ini memberitahu compiler bahwa antarmuka akan menggunakan Repositori untuk melakukan aktivitas database.

Membuat Kontroler dan Penanganan Pengecualian

Buat paket baru bernama controller, dan di dalamnya buat BookController.java file yang berisi titik akhir.

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

Paket impor pertama adalah untuk pengecualian Buku Tidak Ditemukan (untuk itu kita akan membuat filenya sebentar lagi).

Penjelasan Anotasi yang kami gunakan di sini:

  1. Pengendali Istirahat: Anotasi ini digunakan untuk menyatakan setiap metode dalam kelas beranotasi sebagai Objek Domain.

Jadi apa itu Objek Domain…?

Itu hanya mengatakan bahwa Objek Domain ==Objek Bisnis.

Mereka biasanya diwakili oleh entitas dan objek nilai yang terkait dengan titik akhir yang kami berikan untuk mendapatkan data dari database.

2. Otomatis :Anotasi ini digunakan untuk mengirim kelas kacang secara otomatis.

Untuk itu, Anda perlu mengetahui tentang “Apa itu Kelas kacang..?

Pada dasarnya, Kelas Java Bean adalah kelas sederhana yang merangkum banyak objek ke dalamnya.

Ini adalah artikel yang saya tulis di Java Bean Classes.

Berikut ini adalah Anotasi Pemetaan untuk titik akhir untuk melakukan Operasi CRUD.

3. Dapatkan Pemetaan: Ini adalah antarmuka yang berisi jalur titik akhir untuk melakukan metode Get. Antarmuka GetMapping ini menggunakan antarmuka RequestMapping yang dapat memiliki metode “path, value, params, headers” untuk menjalankan metode Get di versi Spring sebelumnya.

Sekarang disederhanakan dengan menggunakan GetMapping.

4. Pemetaan Pasca :Ini adalah antarmuka yang berisi jalur titik akhir untuk melakukan metode Posting.

5. Pemetaan Put: Ini adalah antarmuka yang berisi jalur titik akhir untuk melakukan metode Put to Update.

6. Hapus Pemetaan: Ini adalah antarmuka yang berisi jalur titik akhir untuk melakukan metode Hapus.

Di baris terakhir, Anda mungkin memperhatikan “ResponseEntity ” kata kunci.

Apa itu itu …??

Ini adalah kelas Java yang mewarisi HttpEntity kelas untuk memanipulasi Respons HTTP. Apakah permintaan koneksi adalah “Oke ” atau jika ada masalah, berikan pengecualian dari HttpEntity kelas.

atauElseThrow(): Ini adalah metode yang ditemukan di kelas Opsional di Java8 yang diperkenalkan untuk menangani Pengecualian. Kelas opsional menyediakan berbagai metode utilitas untuk memeriksa ada atau tidaknya suatu objek, yang membantu menangani NullPointerException.

atauElseThrow adalah metode yang Mengembalikan nilai jika ada, jika tidak maka akan memanggil pengecualian.

Membuat NotFoundException jika tidak ada book_id tersebut

Karena metode orElseThrow melempar Pengecualian NotFound. Berikut ini adalah bagian Exception Handling. Buat BookNotFoundException.java file di dalam paket pengecualian.

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

Kelas yang dibuat memperluas Superclass of Exception. Di konstruktor, saya meneruskan book_id &mencetak pengecualian.

Jadi, begitulah…

Kami telah menyelesaikan bagian REST API. Sekarang Anda dapat membangun aplikasi (yang dijelaskan di Bagian 1) dan melakukan beberapa Pengujian dengan Tukang Pos.

Menghubungkan dengan Database MySql

Di dalam application.properties dari sumber daya . Anda folder, tambahkan berikut ini:

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

Itu dia.

Kami telah membangun API REST dasar di Spring Boot. Selamat!

Jika ada yang salah atau perlu diperbaiki, beri tahu saya di bagian komentar.

Hubungi saya di twitter.

Selamat Mengkode!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak digunakan lagi:mysql_connect()

  2. Cara Mengaktifkan Operator Penggabungan Pipa di MySQL

  3. Pemantauan &Manajemen Operasi MySQL 8.0 dengan ClusterControl

  4. Cara Menggunakan JDBC Untuk Menghubungkan Database MySql

  5. Kesalahan saat memuat Modul MySQLdb 'Apakah Anda menginstal mysqlclient atau MySQL-python?'