Skip to main content

Integrasi MongoDB Ke Proyek Spring Boot dengan Spring Data

Jika sebelumnya kita membahas terkait instalasi MongoDB ( pengenalan MongoDB sekilas info ) dan Terminologi umum pada MongoDB (terminologi yang biasa digunakan dalam MongoDB) kini kita akan membahas terkait integrasi MongoDB ke proyek Spring Boot dengan menggunakan Maven Project.

Mengintegrasikan MongoDB ke dalam proyek Spring Boot dan membuat RESTful API lengkap dengan unit testing bisa dibagi menjadi beberapa langkah. Ini akan membantu kamu membangun dasar yang kuat untuk bekerja dengan MongoDB di Spring Boot. Berikut panduan lengkapnya:

1. Setup dan Konfigurasi MongoDB

Sebelumnya pastikan MongoDB sudah menyala dan database "belajar" sudah dibuat.
Kita pakai nama database belajar (Dari Mongo Express http://localhost:8081/)

a. Tambahkan Dependency di pom.xml Pastikan kamu menambahkan dependency MongoDB untuk Spring Data di dalam file pom.xml.

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

Tambakan dependency ke pom.xml dan reload maven project dependenct


b. Konfigurasi MongoDB di application.properties atau application.yml

Pastikan untuk menyertakan URL koneksi ke MongoDB:

spring.application.name=YBoilerplate
spring.data.mongodb.uri=mongodb://root:example@localhost:27017/belajar?authSource=admin
Ingat bahwa root adalah admin username dan example adalah user password.
  • ME_CONFIG_MONGODB_ADMINUSERNAME: root
  • ME_CONFIG_MONGODB_ADMINPASSWORD: example


application.properties

2. Membuat Entity dan Repository

2.1. Membuat Model Entity Misalkan kita buat model sederhana untuk Product.

package com.mhyusuf.yboilerplate.entity;

import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import javax.management.ConstructorParameters;

@Setter
@Getter
@NoArgsConstructor
@RequiredArgsConstructor
@Document(collection = "products")
public class MongoProduct {
@Id
@NonNull private String id;
@NonNull private String name;
@NonNull private Double price;

}

2.2. Membuat Repository Interface Gunakan MongoRepository untuk menyediakan akses ke database MongoDB.

package com.mhyusuf.yboilerplate.repository;

import com.mhyusuf.yboilerplate.entity.MongoProduct;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface MongoProductRepository extends MongoRepository<MongoProduct, String> {
}

3. Membuat Service Layer

Di sini, buatlah business logic dasar. Service layer berguna untuk memisahkan logika bisnis dari controller.

package com.mhyusuf.yboilerplate.service;

import com.mhyusuf.yboilerplate.entity.MongoProduct;
import com.mhyusuf.yboilerplate.repository.MongoProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class MongoProductService {
private final MongoProductRepository productRepository;

@Autowired
public MongoProductService(MongoProductRepository productRepository) {
this.productRepository = productRepository;
}

public List<MongoProduct> getAllProducts() {
return productRepository.findAll();
}

public MongoProduct getMongoProductById(String id) {
return productRepository.findById(id).orElse(null);
}

public MongoProduct addMongoProduct(MongoProduct product) {
return productRepository.save(product);
}

public void deleteMongoProduct(String id) {
productRepository.deleteById(id);
}
}

4. Membuat Controller RESTful API

Sekarang kita buat endpoint RESTful API di dalam controller.

package com.mhyusuf.yboilerplate.controller;

import com.mhyusuf.yboilerplate.entity.MongoProduct;
import com.mhyusuf.yboilerplate.service.MongoProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequestMapping("/api/products")
public class MongoProductController {
private final MongoProductService productService;

@Autowired
public MongoProductController(MongoProductService productService) {
this.productService = productService;
}

@GetMapping
public List<MongoProduct> getAllMongoProducts() {
return productService.getAllMongoProducts();
}

@GetMapping("/{id}")
public MongoProduct getMongoProductById(@PathVariable String id) {
return productService.getMongoProductById(id);
}

@PostMapping
public MongoProduct addMongoProduct(@RequestBody MongoProduct product) {
return productService.addMongoProduct(product);
}

@PutMapping("/{id}")
public ResponseEntity<MongoProduct> updateProduct(@PathVariable String id, @RequestBody MongoProduct productDetails) {
Optional<MongoProduct> updatedProduct = productService.updateProduct(id, productDetails);

return updatedProduct
.map(product -> new ResponseEntity<>(product, HttpStatus.OK))
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
}

@DeleteMapping("/{id}")
public void deleteMongoProduct(@PathVariable String id) {
productService.deleteMongoProduct(id);
}
}

5. Menambahkan Unit Test Sederhana

Untuk menguji integrasi MongoDB, kamu bisa membuat unit test dengan @SpringBootTest.

5.1. Unit Test untuk MongoProductService

package com.mhyusuf.yboilerplate;

import com.mhyusuf.yboilerplate.entity.MongoProduct;
import com.mhyusuf.yboilerplate.service.MongoProductService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class MongoProductServiceTests {

@Autowired
private MongoProductService productService;

@Test
public void testAddProduct() {
MongoProduct product = new MongoProduct("1", "Test Product", 10.0);
MongoProduct savedProduct = productService.addMongoProduct(product);
assertThat(savedProduct.getName()).isEqualTo("Test Product");
}

@Test
public void testGetAllProducts() {
List<MongoProduct> products = productService.getAllMongoProducts();
assertThat(products).isNotNull();
}
}

5.2. Unit Test untuk MongoProductController

Menggunakan @WebMvcTest untuk fokus pada pengujian controller.

package com.mhyusuf.yboilerplate;

import com.mhyusuf.yboilerplate.controller.MongoProductController;
import com.mhyusuf.yboilerplate.service.MongoProductService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest(MongoProductController.class)
public class MongoProductControllerTests {

@Autowired
private MockMvc mockMvc;

@MockBean
private MongoProductService productService;

@Test
public void testGetAllProducts() throws Exception {
mockMvc.perform(get("/api/products"))
.andExpect(status().isOk());
}
}

6. Jalankan dan Uji API Dengan Curl

Setelah konfigurasi selesai, jalankan aplikasi menggunakan IDE atau command line. Pastikan MongoDB juga aktif.

6.1 Buat Data/Row baru di Database Collection

curl -X POST http://localhost:8080/api/products \
  -H "Content-Type: application/json" \
  -d '{"name": "Product 1", "price": 100.0}'

6.2 Dapatkan semua Data/Row di Database Collection

curl -X GET http://localhost:8080/api/products

6.3 Dapatkan sebuah Data/Row di Database Collection dengan id

curl -X GET http://localhost:8080/api/products/{id}
Misalnya: curl -X GET http://localhost:8080/api/products/64e7d7eace8e3f6d3a3c5e42

6.4 Update (PUT) - Memperbarui Product Berdasarkan ID

curl -X PUT http://localhost:8080/api/products/{id} \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Product 1", "price": 150.0}'

5.5 Delete (DELETE) - Menghapus Product Berdasarkan ID

curl -X DELETE http://localhost:8080/api/products/64e7d7eace8e3f6d3a3c5e42

Contoh curls di atas dari terminal

Kode ada di Gihub berikut ini

PS D:\analisa\YBoilerplate> git remote -v
origin  https://github.com/yoesoff/YBoilerplate.git (fetch)
origin  https://github.com/yoesoff/YBoilerplate.git (push)
PS D:\analisa\YBoilerplate> git branch
* mongodb


Selanjutnya: 

 

Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....