Spring Boot CURD 01 - Membuat Aplikasi CURD dengan MYSQL

 



Membuat CURD dengan database MYSQL, dimana curd tersebut akan di implemetasi pada rest api, dan akan di testing dengan menggunakan postman

Requirtment Project :

- Java Version 17.0.2 : https://jdk.java.net/archive/

- Apache Maven 3.9.3 : https://maven.apache.org/download.cgi

- Mysql : https://www.mysql.com/downloads/

- Postman : https://www.postman.com/downloads/

- Intellij IDEA : https://www.jetbrains.com/idea/download/?section=windows

Kita akan memulai membuat aplikasi spring boot, pertama kita buka situs https://start.spring.io/ pada situs ini kita akan membuat project spring boot. Untuk Konfigurasi Project nya nanti Seperi gambar di bawa ini 

Setelah itu Klik Generate Untuk mendownload hasil dari project aplikasi yang sudah di konfigurasi, kemudian project tersebut di extract. dan di project kita di buka dengan Aplikasi Intelij IDEA, berikut hasil nya :

Setelah itu masuk ke halaman application.properties kemudian tambahkan configurasi untuk koneksi dengan MYSQL berikut pathnya :

src\main\resources\application.properties
  
spring.datasource.url=jdbc:mysql://localhost:3306/db_spring_curd
spring.datasource.username=root
spring.datasource.password=

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
Kemudian Buatlah folder dan file seperti berikut di dalam folder berikut src\main\java\com.blackcode.springbootcurdsimple\ 

- controller (folder)

        - BookController (class)

- models (folder)

        - Book (class)

- payload (folder)

        - RequestBook (class)

        - ResponseBook (class)

- repository (folder)

        - BookRepository (Interface)

- service (folder)

        - BookService (Interface)

        - BookServiceImpl (class)

Ketika sudah di buat struktur folder dan file seperti gambar di atas, kemudian kita lanjut untuk code nya

  • models > Book (class)

package com.blackcode.springbootcurdsimple.models;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;

@Data
@Entity
@Table(name = "books")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String bookName;
    private String bookCategory;
    private String bookPengarang;
    private String bookPenerbit;
    private Date bookTahunPenerbit;
}

  • payload > RequestBook (class)

package com.blackcode.springbootcurdsimple.payload;

import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import java.util.Date;

@Data
@AllArgsConstructor
@Builder
public class RequestBook {
    @NotEmpty(message = "name not empty")
    private String bookName;

    @NotEmpty(message = "category not empty")
    private String bookCategory;

    @NotEmpty(message = "Pengarang not empty")
    private String bookPengarang;

    @NotEmpty(message = "Penerbit not empty")
    private String bookPenerbit;

    @NotEmpty(message = "Tahun Penerbit not empty")
    private Date bookTahunPenerbit;
}

  • payload > ResponseBook (class)

package com.blackcode.springbootcurdsimple.payload;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import java.util.Date;

@Data
@AllArgsConstructor
@Builder
public class ResponseBook {
    private Long id;
    private String bookName;
    private String bookCategory;
    private String bookPengarang;
    private String bookPenerbit;
    private Date bookTahunPenerbit;
}
  • repository > BookRepository (interface)

package com.blackcode.springbootcurdsimple.repository;

import com.blackcode.springbootcurdsimple.models.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends JpaRepository<Book, Long>{
}
  • Service > BookService (interface)

package com.blackcode.springbootcurdsimple.service;

import com.blackcode.springbootcurdsimple.payload.RequestBook;
import com.blackcode.springbootcurdsimple.payload.ResponseBook;
import java.util.List;

public interface BookService {

    List<ResponseBook> getListALl();
    ResponseBook getValueBook(Long id);

    ResponseBook addBook(RequestBook requestBook);

    ResponseBook updateBook(Long id, RequestBook requestBook);

    boolean deleteBookById(Long id);
}
  • Service > BookServiceImpl (class)

package com.blackcode.springbootcurdsimple.service;

import com.blackcode.springbootcurdsimple.models.Book;
import com.blackcode.springbootcurdsimple.payload.RequestBook;
import com.blackcode.springbootcurdsimple.payload.ResponseBook;
import com.blackcode.springbootcurdsimple.repository.BookRepository;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@AllArgsConstructor
public class BookServiceImpl implements BookService{

    @Autowired
    BookRepository bookRepository;

    @Override
    public<ListResponseBook> getListALl() {
        List<Book> dataBook = bookRepository.findAll();
        List<ResponseBook> rtnTemp = new ArrayList<>();

        for (Book tempBook : dataBook){
            ResponseBook responseBook = ResponseBook.builder()
                    .id(tempBook.getId())
                    .bookName(tempBook.getBookName())
                    .bookCategory(tempBook.getBookCategory())
                    .bookPenerbit(tempBook.getBookPenerbit())
                    .bookPengarang(tempBook.getBookPengarang())
                    .bookTahunPenerbit(tempBook.getBookTahunPenerbit())
                    .build();
            rtnTemp.add(responseBook);
        }
        return rtnTemp;
    }

    @Override
    public ResponseBook getValueBook(Long id) {
        Optional Book dtBook = bookRepository.findById(id);
        Book tempBook = dtBook.get();
        ResponseBook rtnTemp = ResponseBook.builder()
                .id(tempBook.getId())
                .bookName(tempBook.getBookName())
                .bookCategory(tempBook.getBookCategory())
                .bookPenerbit(tempBook.getBookPenerbit())
                .bookPengarang(tempBook.getBookPengarang())
                .bookTahunPenerbit(tempBook.getBookTahunPenerbit())
                .build();
        return rtnTemp;
    }

    @Override
    public ResponseBook addBook(RequestBook requestBook) {
        Book book = Book.builder()
                .bookName(requestBook.getBookName())
                .bookCategory(requestBook.getBookCategory())
                .bookPenerbit(requestBook.getBookPenerbit())
                .bookPengarang(requestBook.getBookPengarang())
                .bookTahunPenerbit(requestBook.getBookTahunPenerbit())
                .build();
        Book saveBook = bookRepository.save(book);
        ResponseBook responseBook = ResponseBook.builder()
                .id(saveBook.getId())
                .bookName(saveBook.getBookName())
                .bookCategory(saveBook.getBookCategory())
                .bookPengarang(saveBook.getBookPengarang())
                .bookPenerbit(saveBook.getBookPenerbit())
                .bookTahunPenerbit(saveBook.getBookTahunPenerbit())
                .build();
        return responseBook;
    }

    @Override
    public ResponseBook updateBook(Long id, RequestBook requestBook) {
        Optional<Book> optionalBook = bookRepository.findById(id);
        Book book = optionalBook.get();
        book.setBookName(requestBook.getBookName());
        book.setBookCategory(requestBook.getBookCategory());
        book.setBookPenerbit(requestBook.getBookPenerbit());
        book.setBookPengarang(requestBook.getBookPengarang());
        book.setBookTahunPenerbit(requestBook.getBookTahunPenerbit());
        Book updateBook = bookRepository.save(book);
        ResponseBook rtnBook = ResponseBook.builder()
                .id(updateBook.getId())
                .bookName(updateBook.getBookName())
                .bookCategory(updateBook.getBookCategory())
                .bookPengarang(updateBook.getBookPengarang())
                .bookPenerbit(updateBook.getBookPenerbit())
                .bookTahunPenerbit(updateBook.getBookTahunPenerbit())
                .build();
        return rtnBook;
    }

    @Override
    public boolean deleteBookById(Long id) {
        bookRepository.deleteById(id);
        return true;
    }
}

  • Service > BookServiceImpl (class)

package com.blackcode.springbootcurdsimple.controllers;

import com.blackcode.springbootcurdsimple.payload.RequestBook;
import com.blackcode.springbootcurdsimple.payload.ResponseBook;
import com.blackcode.springbootcurdsimple.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping(value = "/api/v1")
public class BookController {

    @Autowired
    BookService bookService;

    @GetMapping(value = "/getAllBook")
    public List<ResponseBook> getListALl(){
        return bookService.getListALl();
    }

    @GetMapping(value = "/getValue/{id}")
    public ResponseBook getValue(@PathVariable("id") Long id){
        return bookService.getValueBook(id);
    }

    @PostMapping(value = "/addBook")
    public ResponseBook addBook(@RequestBody RequestBook requestBook){
        return bookService.addBook(requestBook);
    }

    @PutMapping(value = "/update/{id}")
    public ResponseBook updateBook(@PathVariable("id") Long id, @RequestBody RequestBook requestBook){
        return bookService.updateBook(id, requestBook);
    }

    @DeleteMapping(value = "/delete/{id}")
    public String deleteBook(@PathVariable("id") Long id){
        String rtn = "";
        try {
            boolean rtnTemp = bookService.deleteBookById(id);
            if(rtnTemp){
                rtn = "Book Berhasil Delete : "+id;
            }else{
                rtn = "Book Berhasil Delete : ";
            }

        }catch (Exception e){
            rtn = e.toString();
        }
        return rtn;

    }
}


Setelah semuanya sudah di buat kemudian jalankan perintah berikut pada terminal intelij IDEA nya

mvn spring-boot:run


Setelah Menjalankan Project nya kemudian lakukan testing Insert Data, Get All Data, Get Data By ID, Update Data dan Delete Data dengan menggunakan  Aplikasi POSTMAN
  • Insert Data Book
           -  Endpoint : localhost:8080/api/v1/addBook
           -  Method : POST


  • Get List Data Book
        -  Endpoint : localhost:8080/api/v1/addBook
         -  Method : GET

  • Get Value Data Book By Id
        -  Endpoint : localhost:8080/api/v1/addBook
         -  Method : GET

  • Update Data Book
        -  Endpoint : localhost:8080/api/v1/addBook
         -  Method : PUT

  • Delete Data Book By Id
        -  Endpoint : localhost:8080/api/v1/addBook
         -  Method : DELETE



Komentar