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
- 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
Posting Komentar