Trong bài viết trước, mình đã giới thiệu với các bạn các thao tác cơ bản với MongoDB sử dụng Java. Nếu ứng dụng của các bạn đang sử dụng Spring framework thì hãy tận dụng một thư viện của Spring dành cho MongoDB để thao tác với hệ thống database này. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:
Thư viện mà mình đề cập ở trên có tên là spring-data-mongodb. Mình sẽ thêm dependency của nó như sau:
1 2 3 4 5 |
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.0.7.RELEASE</version> </dependency> |
Interface chính để thao tác với MongoDB trong thư viện spring-data-mongodb là interface MongoOperations. Nó định nghĩa rất nhiều phương thức khác nhau giúp chúng ta có thể dễ dàng thao tác với MongoDB. Class chính hiện thực interface MongoOperations tên là MongoTemplate và để sử dụng interface MongoOperations, chúng ta cần khai báo bean cho class MongoTemplate trong Spring container.
Mình sẽ tạo tập tin cấu hình cho Spring nằm trong thư mục src/main/resources tên là spring.xml với nội dung ban đầu như sau:
1 2 3 4 5 |
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans> |
Class MongoTemplate có 3 constructors, xem thêm tại đây nhé các bạn! Các bạn chọn constructor nào để khởi tạo đối tượng cho MongoTemplate đều được. Ở đây, mình sẽ khởi tạo MongoTemplate với một đối tượng MongoClient kèm theo tên database: MongoTemplate(com.mongodb.MongoClient mongoClient, String databaseName).
1 2 3 4 5 6 7 8 9 |
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongoClient" /> <constructor-arg value="mongodb_example" /> </bean> </beans> |
Chúng ta cần khởi tạo bean cho đối tượng MongoClient.
Nếu MongoDB của các bạn không cần username, password thì các bạn có thể khởi tạo đối tượng MongoClient như sau:
1 |
<bean id="mongoClient" class="com.mongodb.MongoClient" /> |
trong trường hợp MongoDB của các bạn cài đặt ở local và sử dụng port mặc định của nó.
Trong trường hợp MongoDB được cài đặt ở một máy khác thì các bạn có thể khởi tạo đối tượng MongoClient như sau:
1 2 3 4 |
<bean id="mongoClient" class="com.mongodb.MongoClient"> <constructor-arg value="10.29.19.22"/> <constructor-arg value="27017" /> </bean> |
Nếu MongoDB của các bạn cần username và password thì các bạn có thể sử dụng constructor MongoClient(ServerAddress addr, List<MongoCredential> credentialsList) để khởi tạo nó nhé:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<bean id="mongoClient" class="com.mongodb.MongoClient"> <constructor-arg ref="mongoServerAddress" /> <constructor-arg ref="mongoCredentialList" /> </bean> <bean id="mongoServerAddress" class="com.mongodb.ServerAddress"> <constructor-arg value="localhost" /> <constructor-arg value="27017" /> </bean> <bean id="mongoCredential" class="com.mongodb.MongoCredential"> <constructor-arg value="khanh" /> <constructor-arg value="mongodb_example" /> <constructor-arg value="abc123" /> </bean> <bean id="mongoCredentialList" class="java.util.ArrayList"> <constructor-arg> <list> <ref bean="mongoCredential" /> </list> </constructor-arg> </bean> |
Trong ví dụ của bài viết này, mình cài đặt MongoDB ở local và không cần username, password nên mình chỉ cần khởi tạo đối tượng MongoClient như sau:
1 |
<bean id="mongoClient" class="com.mongodb.MongoClient" /> |
Đến đây là chúng ta đã hoàn thành việc cấu hình để làm việc với MongoDB trong Spring rồi đó các bạn. Giờ thử làm một ví dụ nhé!
Mình có một đối tượng Student như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.huongdanjava.spring.mongodb; import org.bson.Document; public class Student extends Document { private static final String NAME = "name"; private static final String AGE = "age"; public static final String COLLECTION_NAME = "student"; public String getName() { return getString(NAME); } public void setName(String name) { put(NAME, name); } public Integer getAge() { return getInteger(AGE); } public void setAge(Integer age) { put(AGE, age); } } |
Insert một document:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.huongdanjava.spring.mongodb; import com.mongodb.client.MongoCollection; import org.bson.Document; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.mongodb.core.MongoOperations; public class Application { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml"); MongoOperations mo = (MongoOperations) ac.getBean("mongoTemplate"); MongoCollection<Document> studentCollection = mo.getCollection(Student.COLLECTION_NAME); Student student = new Student(); student.setName("Khanh"); student.setAge(31); studentCollection.insertOne(student); } } |
Kết quả: