SpringBoot學習筆記(10):使用MongoDB來訪問數據
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添加依賴
<?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批註。
創建一個簡單的查詢
Spring Data MongoDB專註於在MongoDB中存儲數據。它還繼承了Spring Data Commons項目的功能,例如派生查詢的功能。基本上,您不必學習MongoDB的查詢語言;你可以簡單地編寫一些方法,並為你編寫查詢。 我們創建一個repository interface來演示一下查詢功能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/ 或等待筆者的後續教程。
SpringBoot學習筆記(10):使用MongoDB來訪問數據