Belajar Cara Membuat CRUD Rest API Spring Boot
Pada kesempatan kali ini, saya ingin berbagi tutorial cara membuat CRUD Spring Boot - Spring boot merupakan salah satu framework Java yang mempermudah programmer dalam membuat sebuah aplikasi. Untuk membuat project spring boot, kalian dapat kunjungi situs https://start.spring.io/ untuk melakukan initializr project Spring Boot. Pada saat tutorial ini dibuat versi stabil spring boot yang terbaru adalah 2.6.4, dan berikut ini spring initializr yang gunakan :
Project Spring Boot
- Project : Maven Project
- Language : Java
- Spring Boot : 2.6.4
Project Metadata
- Group : com.community
- Artifact : belajar-spring
- Name : belajar-spring
- Description : Belajar Spring Boot
- Package name : com.community.belajar-spring
- Packaging : jar
- Java : 11
Dependencies
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Lombok
CREATEDB -U postgres -p 7117 db_penjualan;
CREATE TABLE master_produk ( id bigserial NOT NULL, kode_produk character varying(255), nama_produk character varying(255), CONSTRAINT id_produk_pk PRIMARY KEY (id) );
INSERT INTO master_produk(id, kode_produk, nama_produk) VALUES (1, 'A101', 'PC Unit'); INSERT INTO master_produk(id, kode_produk, nama_produk) VALUES (2, 'A102', 'Mouse Wireless'); INSERT INTO master_produk(id, kode_produk, nama_produk) VALUES (3, 'A103', 'Keyboard Gaming'); INSERT INTO master_produk(id, kode_produk, nama_produk) VALUES (4, 'A104', 'Layar LED 40 Inchi'); INSERT INTO master_produk(id, kode_produk, nama_produk) VALUES (5, 'A105', 'Flash Disk 8Gb');
Konfigurasi
application.properties
server.port=80 server.servlet.context-path=/belajar-spring spring.datasource.url=jdbc:postgresql://localhost:7117/db_penjualan spring.datasource.username=postgres spring.datasource.password=postgres spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.hibernate.ddl-auto=none
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.community</groupId> <artifactId>belajar-spring</artifactId> <version>0.0.1-SNAPSHOT</version> <name>belajar-spring</name> <description>Belajar Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
BelajarSpringApplication
package com.community.belajarspring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.PropertySource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication @EntityScan(basePackages="com.community.belajarspring.entities") @ComponentScan(basePackages={"com.community.belajarspring"}) @EnableJpaRepositories(basePackages="com.community.belajarspring.repositories") @PropertySource("classpath:application.properties") public class BelajarSpringApplication { public static void main(String[] args) { SpringApplication.run(BelajarSpringApplication.class, args); } }
Membuat Entity Class
Membuat Class MasterProduk
package com.community.belajarspring.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @Data @AllArgsConstructor @NoArgsConstructor @ToString @Entity @Table(name = "master_produk") public class MasterProduk { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "kode_produk") private String kodeProduk; @Column(name = "nama_produk") private String namaProduk; }
Membuat Response
Membuat Class ResponseData
package com.community.belajarspring.response; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @Data @AllArgsConstructor @NoArgsConstructor @ToString public class ResponseData<T> { private int status; private String pesan; private T data; }
Membuat Repository
Membuat Interface MasterProdukRepository
package com.community.belajarspring.repositories; import com.community.belajarspring.entities.MasterProduk; import org.springframework.data.repository.CrudRepository; public interface MasterProdukRepository extends CrudRepository<MasterProduk, Long>{ }
Membuat Service
Membuat Interface MasterProdukService
package com.community.belajarspring.services; import com.community.belajarspring.entities.MasterProduk; import java.util.List; public interface MasterProdukService { public List<MasterProduk> getListProduk(); public MasterProduk getProdukByID(long id); public MasterProduk createMasterProduk(MasterProduk masterProduk); public MasterProduk updateMasterProduk(long id, MasterProduk masterProduk); public boolean deleteMasterProduk(long id); }
Membuat Class MasterProdukServiceImpl
package com.community.belajarspring.services; import com.community.belajarspring.entities.MasterProduk; import com.community.belajarspring.repositories.MasterProdukRepository; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MasterProdukServiceImpl implements MasterProdukService { @Autowired private MasterProdukRepository repository; @Override public List<MasterProduk> getListProduk() { return (List<MasterProduk>) repository.findAll(); } @Override public MasterProduk getProdukByID(long id) { return repository.findById(id).orElse(null); } @Override public MasterProduk createMasterProduk(MasterProduk masterProduk) { return repository.save(masterProduk); } @Override public MasterProduk updateMasterProduk(long id, MasterProduk masterProduk) { MasterProduk produk = repository.findById(id).orElse(null); if (produk != null) { produk.setKodeProduk(masterProduk.getKodeProduk()); produk.setNamaProduk(masterProduk.getNamaProduk()); return repository.save(produk); } else { return null; } } @Override public boolean deleteMasterProduk(long id) { MasterProduk produk = repository.findById(id).orElse(null); if (produk != null) { repository.deleteById(id); return true; } else { return false; } } }
Membuat Rest Controller
Membuat Class MasterProdukAPI
package com.community.belajarspring.rest; import com.community.belajarspring.entities.MasterProduk; import com.community.belajarspring.response.ResponseData; import com.community.belajarspring.services.MasterProdukService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("master-produk") public class MasterProdukAPI { @Autowired private MasterProdukService service; @GetMapping("/list") public ResponseData<List<MasterProduk>> getListMasterProduk() { List<MasterProduk> list = service.getListProduk(); if (!list.isEmpty()) { return new ResponseData(200, "OK", list); } else { return new ResponseData(404, "Data Tidak Ditemukan", null); } } @GetMapping("/{id}") public ResponseData<MasterProduk> getMasterProduk(@PathVariable("id") long id) { MasterProduk masterProduk = service.getProdukByID(id); if (masterProduk != null) { return new ResponseData(200, "OK", masterProduk); } else { return new ResponseData(404, "Data Tidak Ditemukan", null); } } @PostMapping(value = "/create", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseData saveMasterProduk(@RequestBody MasterProduk masterProduk) { MasterProduk produk = service.createMasterProduk(masterProduk); if (produk != null) { return new ResponseData(200, "Data Berhasil Disimpan", produk); } else { return new ResponseData(404, "Data Tidak Ditemukan", null); } } @PutMapping(value = "/update/{id}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseData updateMasterProduk(@PathVariable("id") long id, @RequestBody MasterProduk masterProduk) { MasterProduk produk = service.updateMasterProduk(id, masterProduk); if (produk != null) { return new ResponseData(200, "Perubahan Data Berhasil Disimpan", produk); } else { return new ResponseData(404, "Data Tidak Ditemukan", null); } } @DeleteMapping("/delete/{id}") public ResponseData deleteMasterProduk(@PathVariable("id") long id) { boolean result = service.deleteMasterProduk(id); if (result) { return new ResponseData(200, "Data Berhasil Dihapus", null); } else { return new ResponseData(404, "Data Tidak Ditemukan", null); } } }
Testing
Pada tahap ini, kita akan melakukan uji coba pada rest api yang telah kita buat tadi dengan menggunakan aplikasi Postman. Jangan lupa untuk menjalankan aplikasi tadi dengan mengetikan perintah mvn spring-boot:run atau mvn clean spring-boot-run.
Untuk Source Code Cara Membuat Rest API Server Menggunakan Spring Boot, kalian dapat lihat disini
Sekian tutorial cara membuat rest api menggunakan spring boot, semoga bermanfaat.
0 Response to "Belajar Cara Membuat CRUD Rest API Spring Boot"
Posting Komentar