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添加依赖
首先,需要设置一个基本的构建脚本。在使用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/ 或等待笔者的后续教程。