Nếu bạn đã từng là bất kỳ dạng hệ thống quản lý cơ sở dữ liệu quan hệ nào từ trước đến nay, có lẽ bạn đã bắt gặp cái tên MongoDB. Được giới thiệu lần đầu tiên vào năm 2009, ngày nay mongoDb là một trong những hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất trong ngành. Lý do chính đằng sau sự phổ biến điên cuồng của nó bất chấp sự hiện diện của các phần mềm quản lý cơ sở dữ liệu quan hệ cũ như MySql có mặt trên thị trường là số lượng đa dạng và tính linh hoạt tuyệt vời mà nó mang lại. Việc sử dụng MongoDB loại bỏ nhiều nhu cầu, một trong số đó là nhu cầu tạo cơ sở dữ liệu và xác định kiểu dữ liệu mỗi khi một dự án mới được bắt đầu. Chương trình của bài viết về ứng dụng khách MongoDB:
- Điều kiện tiên quyết đối với Ứng dụng khách MongoDB
- Tạo dự án trên Maven
- Thêm dịch vụ nghỉ ngơi JSON đầu tiên của bạn
- Định cấu hình cơ sở dữ liệu MongoDB
- Chạy cơ sở dữ liệu MongoDB đã định cấu hình
- Tạo giao diện người dùng
- Đơn giản hóa ứng dụng MongoDB bằng codec BSON
- Mã cuối cùng
Nhưng để đạt được chức năng tối đa của MongoDB, người ta cần phải làm quen với ứng dụng MongoDB và trong bài viết này, chúng ta sẽ thảo luận về điều đó.
Điều kiện tiên quyết đối với Ứng dụng khách MongoDB
Để hoàn thành bài viết này, trước tiên bạn cần đáp ứng các điều kiện tiên quyết sau.
Đã có IDE trong hệ thống của bạn.
Bộ phát triển Java hoặc JDK phiên bản 1.8 trở lên được cài đặt với JAVA_HOME được định cấu hình đúng cách.
Docker hoặc MongoDB đã được cài đặt.
Apache Maven phiên bản 3.5.3 trở lên.
Kiến trúc mà chúng tôi đã tạo và sử dụng trong hướng dẫn này là một trong những kiến trúc đơn giản nhất. Khi được thực thi, người dùng có thể dễ dàng thêm dữ liệu và phần tử vào danh sách, sau đó danh sách sẽ tự động được cập nhật trong cơ sở dữ liệu.
Cùng với điều này, chúng tôi đã đảm bảo rằng tất cả giao tiếp giữa dữ liệu và máy chủ là trong JSON và tất cả dữ liệu được lưu trữ trong MongoDB.
Bắt đầu
Để bắt đầu với dự án này, hãy làm theo các bước được nêu bên dưới.
Bước # 1:Tạo dự án trên Maven
Bước đầu tiên luôn là tạo một dự án mới và để thực hiện việc này, hãy sử dụng đoạn mã sau.
mvn io.quarkus:quarkus-maven-plugin:0.22.0:create -DprojectGroupId=org.acme -DprojectArtifactId=using-mongodb-client -DclassName="org.acme.rest.json.FruitResource" -Dpath="/fruits" -Dextensions="resteasy-jsonb,mongodb-client"
Khi bạn chạy lệnh trên, IDE sẽ nhập các ứng dụng khách JSON-B, MongoDb cũng như RESTEasy / JAX-RS vào hệ thống của bạn.
Tiếp tục với Bước 2.
Bước # 2:Thêm dịch vụ nghỉ ngơi JSON đầu tiên của bạn
In order to do this, use the code below. package org.acme.rest.json; import java.util.Objects; public class Fruit { private String name; private String description; public Fruit() { } public Fruit(String name, String description) { this.name = name; this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public boolean equals(Object obj) { if (!(obj instanceof Fruit)) { return false; } Fruit other = (Fruit) obj; return Objects.equals(other.name, this.name); } @Override public int hashCode() { return Objects.hash(this.name); } }
Với ví dụ trên, đầu tiên chúng ta đã tạo Fruit mà sau này sẽ được sử dụng trong chương trình.
Tiếp theo, chúng ta cần tạo tệp org.acme.rest.json.FruitService, đây sẽ là lớp người dùng của ứng dụng của chúng ta. Để thực hiện việc này, hãy sử dụng mã bên dưới.
package org.acme.rest.json; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import org.bson.Document; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.util.ArrayList; import java.util.List; @ApplicationScoped public class FruitService { @Inject MongoClient mongoClient; public List list(){ List list = new ArrayList<>(); MongoCursor cursor = getCollection().find().iterator(); try { while (cursor.hasNext()) { Document document = cursor.next(); Fruit fruit = new Fruit(); fruit.setName(document.getString("name")); fruit.setDescription(document.getString("description")); list.add(fruit); } } finally { cursor.close(); } return list; } public void add(Fruit fruit){ Document document = new Document() .append("name", fruit.getName()) .append("description", fruit.getDescription()); getCollection().insertOne(document); } private MongoCollection getCollection(){ return mongoClient.getDatabase("fruit").getCollection("fruit"); } } Now we need to edit the org.acme.rest.json.FruitResource class to suit our needs. In order to do this, use the code below. @Path("/fruits") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class FruitResource { @Inject FruitService fruitService; @GET public List list() { return fruitService.list(); } @POST public List add(Fruit fruit) { fruitService.add(fruit); return list(); } }
Tiếp tục với Bước 3.
Bước # 3:Định cấu hình cơ sở dữ liệu mongoDb
Cú pháp cũng như mã tiêu chuẩn để định cấu hình cơ sở dữ liệu mongoDb như được cung cấp bên dưới.
# configure the mongoDB client for a replica set of two nodes quarkus.mongodb.connection-string = mongodb://mongo1:27017,mongo2:27017
Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng đoạn mã sau để định cấu hình cơ sở dữ liệu.
# configure the mongoDB client for a replica set of two nodes quarkus.mongodb.connection-string = mongodb://localhost:27017
Tiếp tục với Bước 4.
Bước # 4:Chạy cơ sở dữ liệu MongoDB đã định cấu hình
Bước tiếp theo là chạy cơ sở dữ liệu MongoDB mà chúng ta vừa tạo. Để làm điều này, hãy sử dụng mã bên dưới.
docker run -ti --rm -p 27017:27017 mongo:4.0
Tiếp tục với Bước 5.
Bước # 5:Tạo giao diện người dùng
Bây giờ tất cả công việc ở phần phụ trợ của ứng dụng đã xong, chúng ta hãy xem mã được sử dụng để viết mã giao diện người dùng của ứng dụng của chúng tôi.
package org.acme.rest.json; import io.quarkus.mongodb.ReactiveMongoClient; import io.quarkus.mongodb.ReactiveMongoCollection; import org.bson.Document; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.util.List; import java.util.concurrent.CompletionStage; @ApplicationScoped public class ReactiveFruitService { @Inject ReactiveMongoClient mongoClient; public CompletionStage<List> list(){ return getCollection().find().map(doc -> { Fruit fruit = new Fruit(); fruit.setName(doc.getString("name")); fruit.setDescription(doc.getString("description")); return fruit; }).toList().run(); } public CompletionStage add(Fruit fruit){ Document document = new Document() .append("name", fruit.getName()) .append("description", fruit.getDescription()); return getCollection().insertOne(document); } private ReactiveMongoCollection getCollection(){ return mongoClient.getDatabase("fruit").getCollection("fruit"); } } package org.acme.rest.json; import javax.inject.Inject; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.List; import java.util.concurrent.CompletionStage; @Path("/reactive_fruits") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class ReactiveFruitResource { @Inject ReactiveFruitService fruitService; @GET public CompletionStage<List> list() { return fruitService.list(); } @POST public CompletionStage<List> add(Fruit fruit) { fruitService.add(fruit); return list(); } }
Trong ví dụ trên, chúng tôi đang sử dụng ứng dụng khách mongoDb phản ứng để tạo thuận lợi cho việc hình thành giao diện người dùng.
Tiếp tục với Bước 6.
Bước # 6:Đơn giản hóa ứng dụng mongoDb bằng cách sử dụng codec BSON
Để làm điều này, hãy sử dụng mã bên dưới.
package org.acme.rest.json.codec; import com.mongodb.MongoClient; import org.acme.rest.json.Fruit; import org.bson.*; import org.bson.codecs.Codec; import org.bson.codecs.CollectibleCodec; import org.bson.codecs.DecoderContext; import org.bson.codecs.EncoderContext; import java.util.UUID; public class FruitCodec implements CollectibleCodec { private final Codec documentCodec; public FruitCodec() { this.documentCodec = MongoClient.getDefaultCodecRegistry().get(Document.class); } @Override public void encode(BsonWriter writer, Fruit fruit, EncoderContext encoderContext) { Document doc = new Document(); doc.put("name", fruit.getName()); doc.put("description", fruit.getDescription()); documentCodec.encode(writer, doc, encoderContext); } @Override public Class getEncoderClass() { return Fruit.class; } @Override public Fruit generateIdIfAbsentFromDocument(Fruit document) { if (!documentHasId(document)) { document.setId(UUID.randomUUID().toString()); } return document; } @Override public boolean documentHasId(Fruit document) { return document.getId() != null; } @Override public BsonValue getDocumentId(Fruit document) { return new BsonString(document.getId()); } @Override public Fruit decode(BsonReader reader, DecoderContext decoderContext) { Document document = documentCodec.decode(reader, decoderContext); Fruit fruit = new Fruit(); if (document.getString("id") != null) { fruit.setId(document.getString("id")); } fruit.setName(document.getString("name")); fruit.setDescription(document.getString("description")); return fruit; } }
Bây giờ chúng ta sẽ sử dụng CodecProvider để liên kết lớp này với lớp Fruit đã có.
package org.acme.rest.json.codec; import org.acme.rest.json.Fruit; import org.bson.codecs.Codec; import org.bson.codecs.configuration.CodecProvider; import org.bson.codecs.configuration.CodecRegistry; public class FruitCodecProvider implements CodecProvider { @Override public Codec get(Class clazz, CodecRegistry registry) { if (clazz == Fruit.class) { return (Codec) new FruitCodec(); } return null; } }
Tiếp tục với Bước 7.
Bước # 7:Mã cuối cùng
Mã cuối cùng cho ứng dụng này, sẽ giống như thế này.
package org.acme.rest.json; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.util.ArrayList; import java.util.List; @ApplicationScoped public class CodecFruitService { @Inject MongoClient mongoClient; public List list(){ List list = new ArrayList<>(); MongoCursor cursor = getCollection().find().iterator(); try { while (cursor.hasNext()) { list.add(cursor.next()); } } finally { cursor.close(); } return list; } public void add(Fruit fruit){ getCollection().insertOne(fruit); } private MongoCollection getCollection(){ return mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class); } }
Kết luận
Bây giờ bạn đã biết cách cấu hình và sử dụng ứng dụng MongoDB trong hệ thống của mình. Hãy tiếp tục và thử các mã này trong hệ thống của bạn và cho chúng tôi biết trải nghiệm của bạn.
Tóm tắt bài viết
Tìm hiểu tất cả về ứng dụng MongoDB và cách bạn có thể định cấu hình tương tự trong hệ thống của mình cho các mục đích sử dụng khác nhau. Đọc để biết thêm.
Với điều này, chúng ta đi đến phần cuối của “ Ứng dụng khách MongoDB ” bài báo.
Các đợt sắp tới cho khóa đào tạo cấp chứng chỉ MongoDBTên khóa học | Ngày | |
---|---|---|
Khóa đào tạo chứng chỉ MongoDB | Lớp học bắt đầu vào ngày 4 tháng 6 năm 2022 Ngày 4 tháng 6 SAT &SUN (Đợt cuối tuần) | Xem chi tiết |
Khóa đào tạo chứng chỉ MongoDB | Lớp học khai giảng vào ngày 6 tháng 8 năm 2022 Ngày 6 tháng 8 SAT &SUN (Đợt cuối tuần) | Xem chi tiết |