SpringBoot學習筆記(10):使用MongoDB來訪問數據
快速開始
本指南將引導您完成使用Spring Data MongoDB構建應用程序的過程,該應用程序將數據存儲在MongoDB(基於文檔的數據庫)中並從中檢索數據。關於MongoDB的相關教程可以參考其官方文檔或者筆者的相關教程,我們主要探討在SpringBoot中快速開始MongoDB數據庫服務的相關操作。
本節內容的思維導圖大致如下:

參考教程:
https://spring.io/guides/gs/accessing-data-mongodb/
https://spring.io/guides/gs/accessing-mongodb-data-rest/
基於Maven添加依賴
首先,需要設置一個基本的構建腳本。在使用Spring構建應用程序時,您可以使用任何您喜歡的構建系統,但此處包含了使用Maven所需的代碼。
如果您不熟悉Maven,請參閱使用Maven構建Java項目。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-accessing-data-mongodb</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</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>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
定義一個簡單的實體
import org.springframework.data.annotation.Id;
public class User {
@Id
private Integer id;
private String username;
private String password;
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
//get,set訪問器隱藏了
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
id主要供MongoDB內部使用。在創建新實例時,您還有一個構造函數來填充實體。id符合MongoDB id的標准名稱,因此它不需要任何特殊的注解來為Spring Data MongoDB標記它,即使用Spring Data提供的ID注解就可以了。其他兩個屬性未注釋,表示它們將映射到與屬性本身共享同一名稱的字段。
MongoDB將數據存儲在集合中。 Spring Data MongoDB將User類映射到一個名為User的集合。如果要更改集合的名稱,可以在類上使用Spring Data MongoDB的@Document批注。
創建一個簡單的查詢
import com.mrsaber.filebar.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User,Integer> {
public User findByUsername(String username);
}
UserRepository擴展了MongoRepository接口並插入了它的工作原理:User和Integer,即管理域類以及域類的ID類型作為類型參數。開箱即用,該界面帶有許多操作,包括標准CRUD操作(create-read-update-delete)
創建應用程序類
package com.mrsaber.filebar;
import com.mrsaber.filebar.domain.User;
import com.mrsaber.filebar.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class FilebarApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(FilebarApplication.class, args);
}
@Autowired
private UserRepository userRepository;
@Override
public void run(String... args) throws Exception {
userRepository.save(new User(1,"admin","123456"));
System.out.println(userRepository.findByUsername("admin"));
}
}
main()方法使用Spring Boot的SpringApplication.run()方法啟動應用程序。你有沒有注意到沒有一行XML?沒有web.xml文件。這個Web應用程序是100%純Java,您不必處理配置任何管道或基礎設施。Spring Boot將自動處理這些存儲庫,只要它們包含在@SpringBootApplication類的相同包(或子包)中即可。為了更好地控制注冊過程,您可以使用@EnableMongoRepositories注解。
默認情況下,@EnableMongoRepositories將掃描當前包中的任何擴展Spring Data存儲庫接口的接口。使用它的basePackageClasses = MyRepository.class安全地告訴Spring Data MongoDB按類型掃描不同的根包,如果你的項目布局有多個項目並且沒有找到你的存儲庫。
說明:
我們可以在配置文件中指定數據庫、主機、端口號等信息
spring.data.mongodb.database=myDB spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration如果此時你程序啟動出現問題,需要加入最后一行!
使用REST訪問MongoDB數據
添加REST服務依賴
<!--添加REST依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
什么是Spring-Data-REST?
Spring Data REST是Spring Data項目的一部分,可以幫助我們很容易地在Spring Data存儲庫之上構建HTTP驅動的REST Web服務。官方文檔地址:https://docs.spring.io/spring-data/rest/docs/3.0.8.RELEASE/reference/html/
創建文檔倉庫
import com.mrsaber.filebar.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "user", path = "user")
public interface UserRepository extends MongoRepository<User,Integer> {
public User findByUsername(String username);
}
這個存儲庫是一個接口,並允許您執行涉及user對象的各種操作。它通過擴展MongoRepository來獲得這些操作,這反過來又擴展了Spring Data Commons中定義的PagingAndSortingRepository接口。 在運行時,Spring Data REST將自動創建該接口的實現。然后它將使用@RepositoryRestResource注釋來指導Spring MVC在/ people處創建RESTful端點。
構建可執行應用程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class FilebarApplication{
public static void main(String[] args) {
SpringApplication.run(FilebarApplication.class, args);
}
}
測試運行結果
您可從該文檔中學習查詢方式:https://spring.io/guides/gs/accessing-mongodb-data-rest/ 或等待筆者的后續教程。


