0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hướng Dẫn Toàn Diện: Tích Hợp MongoDB với Spring Boot

Đăng vào 1 tháng trước

• 5 phút đọc

Hướng Dẫn Toàn Diện: Tích Hợp MongoDB với Spring Boot (CRUD, Lombok, Giao Dịch, Atlas)

Giới thiệu

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu cách tích hợp MongoDB với Spring Boot từ những bước cài đặt đầu tiên cho đến việc xây dựng một ứng dụng CRUD hoàn chỉnh. Chúng ta sẽ thảo luận về sự khác biệt giữa JPA/ORM và cơ sở dữ liệu tài liệu, cũng như cách sử dụng các mối quan hệ với @DBRef, giao dịch, các thực tiễn tốt nhất về ResponseEntity, sử dụng Lombok và kết nối với MongoDB Atlas. Bài viết sẽ cung cấp các đoạn mã có thể sao chép và dán để bạn có thể áp dụng ngay lập tức.

Mục lục

  1. Cài đặt MongoDB
  2. Khái niệm cơ bản về MongoDB
  3. Sự khác biệt giữa ORM, JPA và MongoDB
  4. Tích hợp MongoDB vào Spring Boot
  5. Sử dụng ResponseEntity trong Spring Boot
  6. Sử dụng Lombok trong Java
  7. Quản lý mối quan hệ trong MongoDB
  8. Giao dịch trong MongoDB
  9. Kết nối Spring Boot với MongoDB Atlas
  10. Kiểm tra và khắc phục sự cố
  11. Mã nguồn CRUD sinh viên
  12. Kết luận

1. Cài đặt MongoDB

Các bước cài đặt MongoDB trên các hệ điều hành

Hãy sử dụng tài liệu chính thức của MongoDB để có hướng dẫn cài đặt cụ thể cho từng nền tảng.

macOS (sử dụng Homebrew)

  1. Cài đặt Homebrew (nếu bạn chưa có).
  2. Thêm kho lưu trữ chính thức của MongoDB và cài đặt máy chủ cộng đồng:
bash Copy
brew tap mongodb/brew
brew update
brew install mongodb-community
# khởi động
brew services start mongodb/brew/mongodb-community
# dừng
brew services stop mongodb/brew/mongodb-community

Ubuntu / Debian (sử dụng kho lưu trữ chính thức)

bash Copy
# 1. Nhập khóa GPG công khai, thêm kho lưu trữ
# 2. Cập nhật và cài đặt
sudo apt update
sudo apt install -y mongodb-org
# khởi động
sudo systemctl start mongod
sudo systemctl enable mongod

Windows (sử dụng trình cài đặt MSI)

  1. Tải xuống trình cài đặt MongoDB Community MSI từ trang tải xuống của MongoDB.
  2. Chạy trình cài đặt MSI, làm theo hướng dẫn (chọn cài đặt “Complete” và có thể cài đặt MongoDB như một dịch vụ Windows).
  3. Khởi động dịch vụ MongoDB.

2. Khái niệm cơ bản về MongoDB

  • Tài liệu — một đối tượng JSON/BSON (giống như một hàng nhưng linh hoạt). Ví dụ: { _id: ObjectId("..."), name: "Aisha", address: "Dhaka" }.
  • Bộ sưu tập — nhóm các tài liệu (giống như bảng SQL nhưng không có sơ đồ).
  • Cơ sở dữ liệu — chứa các bộ sưu tập.
  • BSON — mã hóa nhị phân được MongoDB sử dụng.
  • _id — khóa chính, tự động được sinh ra nếu bạn không cung cấp.
  • Chỉ mục — tăng tốc truy vấn (tạo khi cần thiết).
  • Replica Set — nhiều phiên bản mongod cung cấp độ tin cậy và cho phép giao dịch nhiều tài liệu.
  • Sharding — mở rộng theo chiều ngang cho các tập dữ liệu lớn.

MongoDB là một cơ sở dữ liệu tài liệu được thiết kế để dễ phát triển và mở rộng.

3. Sự khác biệt giữa ORM, JPA và MongoDB

ORM & JPA (cơ sở dữ liệu quan hệ):

  • ORM ánh xạ các đối tượng Java ↔ bảng quan hệ.
  • JPA (Java Persistence API) là API chuẩn; spring-data-jpa là lớp tiện lợi của Spring thực hiện các kho chứa trên các nhà cung cấp JPA (Hibernate).

MongoDB (cơ sở dữ liệu tài liệu) + Spring Data MongoDB:

  • Tài liệu thay vì hàng; không có SQL, không cần sơ đồ RDBMS.
  • Spring Data cung cấp một mô-đun Mongo-specific: spring-boot-starter-data-mongodb. Bạn không sử dụng các chú thích JPA cho Mongo — sử dụng @Document, @Id, và MongoRepository.

4. Tích hợp MongoDB vào Spring Boot

Thiết lập dependencies trong pom.xml

xml Copy
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>
</dependencies>

Cấu hình application.properties

properties Copy
# MongoDB cục bộ
spring.data.mongodb.uri=mongodb://localhost:27017/studentsdb

Kết nối tới MongoDB Atlas

properties Copy
# Kết nối tới Atlas (thay thế các tham số)
spring.data.mongodb.uri=mongodb+srv://<username>:<password>@cluster0.xxxxxx.mongodb.net/studentsdb?retryWrites=true&w=majority

5. Sử dụng ResponseEntity trong Spring Boot

ResponseEntity<T> đại diện cho toàn bộ phản hồi HTTP (trạng thái, tiêu đề, thân). Sử dụng nó để gửi mã trạng thái thích hợp từ các controller của bạn.

Ví dụ về Controller

java Copy
@PostMapping("/api/students")
public ResponseEntity<Student> create(@RequestBody Student s) {
  Student created = service.create(s);
  URI location = URI.create("/api/students/" + created.getId());
  return ResponseEntity.created(location).body(created);
}

6. Sử dụng Lombok trong Java

Lombok loại bỏ các getter/setter/constructor lặp đi lặp lại. Ví dụ:

java Copy
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(collection = "students")
public class Student {
  @Id
  private String id;
  private String name;
  private String address;
  private String phone;
}

7. Quản lý mối quan hệ trong MongoDB

Hai kiểu mối quan hệ chính:

  1. Embedding — bao gồm tài liệu liên quan bên trong tài liệu cha (đọc nhanh, không chuẩn hóa).
  2. Referencing (@DBRef) — lưu trữ một tham chiếu đến tài liệu khác (tránh trùng lặp nhưng yêu cầu tìm kiếm bổ sung).

8. Giao dịch trong MongoDB

MongoDB hỗ trợ giao dịch ACID đa tài liệu. Để sử dụng chúng với Spring Data MongoDB, bạn cần chạy MongoDB như một replica set.

Cấu hình giao dịch tối thiểu

java Copy
@Configuration
@EnableTransactionManagement
public class MongoConfig {
  @Bean
  MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
  }
}

9. Kết nối Spring Boot với MongoDB Atlas

  1. Đăng ký MongoDB Atlas và tạo một cụm miễn phí.
  2. Tạo người dùng cơ sở dữ liệu.
  3. Thêm địa chỉ IP của bạn vào quyền truy cập mạng.
  4. Nhận chuỗi kết nối từ Atlas và thiết lập trong application.properties.

10. Kiểm tra và khắc phục sự cố

  • Không thể kết nối đến Atlas — kiểm tra whitelist IP và mã hóa URL trong mật khẩu.
  • Giao dịch không hoạt động — đảm bảo Mongo chạy như một replica set.

11. Mã nguồn CRUD sinh viên

Student.java (với Lombok)

java Copy
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(collection = "students")
public class Student {
  @Id
  private String id;
  private String name;
  private String address;
  private String phone;
}

StudentService

java Copy
@Service
public class StudentService {
  private final StudentRepository repo;
  public StudentService(StudentRepository repo) { this.repo = repo; }
  public Student create(Student s) { return repo.save(s); }
}

StudentController

java Copy
@RestController
@RequestMapping("/api/students")
public class StudentController {
  private final StudentService service;
  public StudentController(StudentService service) { this.service = service; }
}

12. Kết luận

Bạn đã thiết lập MongoDB cục bộ, tích hợp nó vào dự án Spring Boot và tìm hiểu cách nó khác với JPA/ORM. Bạn có thể xây dựng một REST API CRUD hoàn chỉnh dựa trên MongoDB. Hãy thử nghiệm với các chỉ mục để tối ưu hóa truy vấn và triển khai ứng dụng của bạn lên nền tảng đám mây.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào