本指南将引导您完成使用过程春季数据 MongoDB构建一个存储数据并从中检索数据的应用程序蒙戈数据库,一个基于文档的数据库。
您将构建什么
您将使用 Spring Data MongoDB 将 POJO(普通旧 Java 对象)存储在 MongoDB 数据库中。Customer
你需要什么
- 约15分钟
- 最喜欢的文本编辑器或 IDE
- JDK 1.8或以后
- 格拉德尔 4+或梅文 3.2+
- 您也可以将代码直接导入到 IDE 中:
- 弹簧工具套件 (STS)
- 智能理念
- VSCode
如何完成本指南
像大多数春天一样入门指南,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。
要从头开始,请继续从 Spring 初始化开始.
要跳过基础知识,请执行以下操作:
- 下载并解压缩本指南的源存储库,或使用吉特:
git clone https://github.com/spring-guides/gs-accessing-data-mongodb.git
- 光盘成
gs-accessing-data-mongodb/initial
- 跳转到安装并启动MongoDB.
完成后,您可以根据 中的代码检查结果。gs-accessing-data-mongodb/complete
从 Spring 初始化开始
你可以使用这个预初始化项目,然后单击生成以下载 ZIP 文件。此项目配置为适合本教程中的示例。
手动初始化项目:
- 导航到https://start.spring.io.此服务拉入应用程序所需的所有依赖项,并为您完成大部分设置。
- 选择 Gradle 或 Maven 以及您要使用的语言。本指南假定您选择了 Java。
- 单击依赖关系,然后选择Spring Data MongoDB。
- 单击生成。
- 下载生成的 ZIP 文件,该文件是配置了您选择的 Web 应用程序的存档。
如果您的 IDE 集成了 Spring Initializr,则可以从 IDE 完成此过程。 |
您也可以从 Github 分叉项目,然后在 IDE 或其他编辑器中打开它。 |
安装并启动MongoDB
设置项目后,您可以安装和启动MongoDB数据库。
如果您将 Mac 与自制软件一起使用,则可以运行以下命令:
$ brew install mongodb
使用 MacPorts,您可以运行以下命令:
$ port install mongodb
对于其他具有包管理功能的系统,例如Redhat,Ubuntu,Debian,CentOS和Windows,请参阅以下说明:https://docs.mongodb.org/manual/installation/.
安装 MongoDB 后,您可以通过运行以下命令(也会启动服务器进程)在控制台窗口中启动它:
$ mongod
应会看到类似于以下内容的输出:
all output going to: /usr/local/var/log/mongodb/mongo.log
定义简单实体
MongoDB是一个NoSQL文档存储。在此示例中,您将存储对象。下面的清单显示了 Customer 类 (in ):Customer
src/main/java/com/example/accessingdatamongodb/Customer.java
package com.example.accessingdatamongodb;
import org.springframework.data.annotation.Id;
public class Customer {
@Id
public String id;
public String firstName;
public String lastName;
public Customer() {}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return String.format(
"Customer[id=%s, firstName='%s', lastName='%s']",
id, firstName, lastName);
}
}
这里有一个具有三个属性的类:、 和 。它主要供MongoDB内部使用。您还有一个构造函数用于在创建新实例时填充实体。Customer
id
firstName
lastName
id
在本指南中,为简洁起见,省略了典型的吸气者和二传手。 |
id
符合MongoDB ID的标准名称,因此不需要任何特殊注释来标记Spring Data MongoDB。
其他两个属性 和 不带批注。假定它们映射到与属性本身同名的字段。firstName
lastName
方便的方法打印出有关客户的详细信息。toString()
MongoDB将数据存储在集合中。Spring Data MongoDB将类映射到一个名为.如果要更改集合的名称,可以使用Spring Data MongoDB的 |
创建简单查询
Spring Data MongoDB专注于在MongoDB中存储数据。它还继承了Spring Data Commons项目的功能,例如派生查询的能力。本质上,你不需要学习MongoDB的查询语言。您可以编写一些方法,查询将为您编写。
若要了解其工作原理,请创建一个查询文档的存储库界面,如以下清单 (in ) 所示:Customer
src/main/java/com/example/accessingdatamongodb/CustomerRepository.java
package com.example.accessingdatamongodb;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface CustomerRepository extends MongoRepository<Customer, String> {
public Customer findByFirstName(String firstName);
public List<Customer> findByLastName(String lastName);
}
CustomerRepository
扩展接口并插入它所处理的值和 ID 的类型:和 ,分别。此接口附带许多操作,包括标准 CRUD 操作(创建、读取、更新和删除)。MongoRepository
Customer
String
可以通过声明其他查询的方法签名来定义其他查询。在这种情况下,add ,它实质上是查找类型的文档并查找与 匹配的文档。findByFirstName
Customer
firstName
您还有 ,它按姓氏查找人员列表。findByLastName
在典型的 Java 应用程序中,您编写一个类来自己实现和创建查询。Spring Data MongoDB之所以如此有用,是因为您不需要创建此实现。Spring Data MongoDB在运行应用程序时会动态创建它。CustomerRepository
现在你可以连接这个应用程序,看看它是什么样子的!
创建应用程序类
Spring Initializr 为应用程序创建了一个简单的类。下面的清单显示了 Initializr 为此示例创建的类(在 中):src/main/java/com/example/accessingdatamongodb/AccessingDataMongodbApplication.java
package com.example.accessingdatamongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AccessingDataMongodbApplication {
public static void main(String[] args) {
SpringApplication.run(AccessingDataMongodbApplication.class, args);
}
}
@SpringBootApplication
是一个方便的注释,它添加了以下所有内容:
-
@Configuration
:将类标记为应用程序上下文的 Bean 定义源。 -
@EnableAutoConfiguration
:告诉 Spring 引导根据类路径设置、其他 bean 和各种属性设置开始添加 bean。例如,如果 在类路径上,则此注释会将应用程序标记为 Web 应用程序并激活关键行为,例如设置 .spring-webmvc
DispatcherServlet
-
@ComponentScan
:告诉 Spring 在包中查找其他组件、配置和服务,让它找到控制器。com/example
该方法使用 Spring Boot 的方法启动应用程序。您是否注意到没有一行 XML?也没有文件。此 Web 应用程序是 100% 纯 Java,您无需处理配置任何管道或基础结构。main()
SpringApplication.run()
web.xml
Spring Boot 会自动处理这些存储库,只要它们包含在类的同一包(或子包)中。若要更好地控制注册过程,可以使用注释。@SpringBootApplication
@EnableMongoRepositories
默认情况下,扫描当前包以查找扩展 Spring Data 的存储库接口之一的任何接口。您可以使用它安全地告诉Spring Data MongoDB按类型扫描不同的根包,如果您的项目布局有多个项目并且找不到您的存储库。 |
Spring Data MongoDB使用来执行方法背后的查询。您可以自行使用该模板进行更复杂的查询,但本指南不涉及这一点。(见MongoTemplate
find*
Spring Data MongoDB 参考指南)
现在,您需要修改初始化者为您创建的简单类。您需要设置一些数据并使用它来生成输出。以下清单显示了已完成的类(在 中):AccessingDataMongodbApplication
src/main/java/com/example/accessingdatamongodb/AccessingDataMongodbApplication.java
package com.example.accessingdatamongodb;
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 AccessingDataMongodbApplication implements CommandLineRunner {
@Autowired
private CustomerRepository repository;
public static void main(String[] args) {
SpringApplication.run(AccessingDataMongodbApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
repository.deleteAll();
// save a couple of customers
repository.save(new Customer("Alice", "Smith"));
repository.save(new Customer("Bob", "Smith"));
// fetch all customers
System.out.println("Customers found with findAll():");
System.out.println("-------------------------------");
for (Customer customer : repository.findAll()) {
System.out.println(customer);
}
System.out.println();
// fetch an individual customer
System.out.println("Customer found with findByFirstName('Alice'):");
System.out.println("--------------------------------");
System.out.println(repository.findByFirstName("Alice"));
System.out.println("Customers found with findByLastName('Smith'):");
System.out.println("--------------------------------");
for (Customer customer : repository.findByLastName("Smith")) {
System.out.println(customer);
}
}
}
AccessingDataMongodbApplication
包括自动连接 的实例的方法。Spring Data MongoDB动态创建一个代理并将其注入其中。我们通过一些测试来使用。首先,它保存了一些对象,演示方法并设置一些要使用的数据。接下来,它调用从数据库中获取所有对象。然后它打电话用她的名字来获取单曲。最后,它调用查找姓氏为 . 的所有客户。main()
CustomerRepository
CustomerRepository
Customer
save()
findAll()
Customer
findByFirstName()
Customer
findByLastName()
Smith
默认情况下,Spring Boot 会尝试连接到本地托管的 MongoDB 实例。阅读参考文档了解有关将应用程序指向托管在其他地方的 MongoDB 实例的详细信息。 |
构建可执行的 JAR
您可以使用 Gradle 或 Maven 从命令行运行应用程序。您还可以构建一个包含所有必需依赖项、类和资源的可执行 JAR 文件并运行该文件。通过构建可执行 jar,可以轻松地在整个开发生命周期中跨不同环境等将服务作为应用程序进行交付、版本控制和部署。
如果使用 Gradle,则可以使用 .或者,您可以使用 JAR 文件生成 JAR 文件,然后运行该文件,如下所示:./gradlew bootRun
./gradlew build
java -jar build/libs/gs-accessing-data-mongodb-0.1.0.jar
如果使用 Maven,则可以使用 运行应用程序。或者,您可以使用 JAR 文件生成 JAR 文件,然后运行该文件,如下所示:./mvnw spring-boot:run
./mvnw clean package
java -jar target/gs-accessing-data-mongodb-0.1.0.jar
此处描述的步骤将创建一个可运行的 JAR。你也可以构建经典 WAR 文件. |
作为实现,该方法在 Spring 引导启动时自动调用。您应该看到类似以下内容的内容(以及其他输出,例如查询):AccessingDataMongodbApplication
CommandLineRunner
run
== Customers found with findAll():
Customer[id=51df1b0a3004cb49c50210f8, firstName='Alice', lastName='Smith']
Customer[id=51df1b0a3004cb49c50210f9, firstName='Bob', lastName='Smith']
== Customer found with findByFirstName('Alice'):
Customer[id=51df1b0a3004cb49c50210f8, firstName='Alice', lastName='Smith']
== Customers found with findByLastName('Smith'):
Customer[id=51df1b0a3004cb49c50210f8, firstName='Alice', lastName='Smith']
Customer[id=51df1b0a3004cb49c50210f9, firstName='Bob', lastName='Smith']
总结
祝贺!您设置了一个MongoDB服务器并编写了一个简单的应用程序,该应用程序使用Spring Data MongoDB将对象保存到数据库中并从数据库中获取它们,所有这些都不需要编写具体的存储库实现。
如果您想毫不费力地使用基于超媒体的RESTful前端公开MongoDB存储库,请阅读使用 REST 访问 MongoDB 数据. |