Belajar Cara Membuat CRUD Rest API Spring Boot - Java Community

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
Gambar 1 : Initializr Spring Boot Project

Buat DB
CREATEDB -U postgres -p 7117 db_penjualan;
  
Membuat Tabel
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 Data
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

CODE
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

CODE
<?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

Ubah Class BelajarSpringApplication menjadi seperti berikut :

CODE
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

Buatlah sebuah package dengan nama entities kemudian buat sebuat Class MasterProduk.

Membuat Class MasterProduk

CODE
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

Buatlah sebuah package dengan nama response kemudian buat sebuah Class ResponseData.

Membuat Class ResponseData

CODE
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

Buatlah sebuah package dengan nama repositories kemudian buat sebuah Interface MasterProdukRepository.

Membuat Interface MasterProdukRepository

CODE
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

Buatlah sebuah package dengan nama services kemudian buat sebuah Interface MasterProdukService dan sebuah Class MasterProdukServiceImpl.

Membuat Interface MasterProdukService

CODE
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

CODE
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

Buatlah sebuah package dengan nama rest kemudian buat sebuah Class MasterProdukAPI.

Membuat Class MasterProdukAPI

CODE
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.

Belajar Cara Membuat CRUD Rest API Spring Boot
Gambar 2 : Menjalankan Spring Boot

Gambar 3 : Mengambil Semua Data Master Produk

Gambar 4 : Mengambil Data Master Produk Berdasarkan ID

Belajar Cara Membuat CRUD Rest API Spring Boot
Gambar 5 : Menambahkan Data Master Produk

Belajar Cara Membuat CRUD Rest API Spring Boot
Gambar 6 : Merubah Data Master Produk Berdasarkan ID

Belajar Cara Membuat CRUD Rest API Spring Boot
Gambar 7 : Menghapus Data Master Produk Berdasarkan ID

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.


Subscribe to receive free email updates:

0 Response to "Belajar Cara Membuat CRUD Rest API Spring Boot"

Posting Komentar