如何使用 Spring Data MongoDB 访问 MongoDB 数据库?

是这样的,想请讲解下,如何使用 Spring Data MongoDB 访问 MongoDB 数据库?
最新回答
仙蒂瑞拉

2024-11-06 09:05:28

大家好,我是磊磊落落,目前我在技术上主要关注:Java、Golang、架构设计、云原生和自动化测试。欢迎来我的博客( leileiluoluo.com)获取我的最近更新!

Spring Data MongoDB 是 Spring 框架提供的一个访问 MongoDB 数据库的模块,该模块延续了 Spring Data 系列统一的数据库访问风格(通过Template 的方式与定义 Repository 接口的方式),借助于该模块可以使 MongoDB 的访问变得简单又高效。

本文以一个使用 Maven 管理的 Spring Boot 工程为例,结合本地搭建的 MongoDB(版本为 7.0.7)来演示 Spring Data MongoDB 的使用。

在 Spring Boot 中使用 Spring Data MongoDB,只需要引入一个spring-boot-starter-data-mongodb 依赖即可,该依赖会自动将 Spring Data MongoDB 及相关依赖一并引入,并已与 Spring Boot 进行了无缝集成。

如下为示例工程所使用的 JDK、Maven、Spring Boot 与 Spring Data MongoDB 的版本:

本文将以 User 的增、删、改、查为例来演示 Spring Data MongoDB 的使用。开始前先让我们准备一下测试数据。

1 测试数据准备

使用 MongoShell 连接本地 MongoDB 数据库mongodb://localhost:27017。然后在 MongoShell 命令行执行如下语句来创建一个测试数据库 test,并在 test 库里创建一个集合 users,最后在 users 集合插入 3 条测试数据。

查询一下,发现 3 条数据均已插入,且自动生成了 ID。

测试数据准备好后,下面看一下示例工程的依赖与配置。

2 示例工程依赖与配置
2.1 POM.xml 依赖项

如下为示例工程spring-data-mongodb-demo 的根目录文件 pom.xml 的内容,可以看到其使用了 spring-boot-starter-parent,并引入了 3 个依赖项:spring-boot-starter-web、spring-boot-starter-data-mongodb 和 lombok。

2.2 application.yaml 配置

如下为application.yaml 文件的内容,可以看到该文件配置了本地 MongoDB 的连接信息,并开启了 MongoDB 查询语句的打印。

示例工程依赖和配置准备好后,即可以尝试对 Spring Data MongoDB 进行使用了。

3 开始使用 Spring Data MongoDB
3.1 编写 Model 类

首先需要编写一下 Model 类User.java,其代码如下:

可以看到,如上代码在类上使用了@Document 注解,并指定了对应的 MongoDB 集合为 users;对主键字段使用了 @Id 注解;并对与 MongoDB 集合中命名不一致的属性使用了 @Field 注解指定了实际的字段名。此外还使用 Lombok 的 @Data 注解自动生成了 Setters 和 Getters。

3.2 编写 Repository

下面我们为 User Model 创建一个对应的Repository 接口 UserRepository,并将其扩展 MongoRepository 接口。MongoRepository 接口已内置了常用的增、删、改、查方法,通常来说我们无需自己编写任何方法,使用这些默认方法就满足大多数需求了。但 Spring Data MongoDB 还支持在 Repository 接口中按照约定的命名规则添加自定义查询方法。

可以看到,我们只在UserRepository 接口增加了一个 findByName 自定义方法。

下面即在src/test/java 文件夹下针对 UserRepository 编写一个单元测试类来对其提供的增、删、改、查方法进行测试。

测试发现,包括自定义方法在内的各个增、删、改、查方法均是好用的。

3.3 使用 MongoTemplate

除了通过定义Repository 接口来对 MongoDB 进行通用的增、删、改、查操作外,我们还可以使用更加灵活的 MongoTemplate 来对 MongoDB 进行操作。

下面即为MongoTemplate 编写一个单元测试类来对其提供的功能进行简单测试。

可以看到,使用MongoTemplate 时,我们可以新建一个 Query 对象来拼装任意复杂的查询条件,进而对 MongoDB 进行查询或更新。

综上,本文以示例工程的方式演示了 Spring Data MongoDB 提供的两种 MongoDB 的访问方式(通过定义Repository 和使用 MongoTemplate),总体来说该模块保持了 Spring Data 系列通用的设计思路与实现模式,使用起来非常的直观简便。完整示例工程已提交至本人 GitHub,欢迎关注或 Fork。

参考资料 [1] Spring: Spring Data MongoDB Reference Document - docs.spring.io/spring-d...

[2] MongoDB: Spring Boot Integration With MongoDB Tutorial - mongodb.com/compatibili...

[3] DigitalOcean: Spring Boot MongoDB - digitalocean.com/commun...