写点什么

Spring Data MongoDB 使用示例

作者:
  • 2022 年 4 月 27 日
  • 本文字数:2150 字

    阅读完需:约 7 分钟

简介

在以前的文章中,介绍了在 Java 中如何原生的使用 MongoDB,本篇将介绍如果使用 Spring 封装好的 MongoDB Data

Maven 依赖

我们使用一个简单的 Web 服务作为示例,完整的 Maven 配置如下:


我们导入 MongoDB 核心:spring-boot-starter-data-mongodb


<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.6.6</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.self.growth</groupId>    <artifactId>task</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>task</name>    <description>task</description>    <properties>        <java.version>17</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-web</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>
</project>
复制代码

实体/模型和 Repository

如同使用 mybatis 一样,我们也需要创建一个映射到数据库中数据模型的类


如下所示,我们就使用注解标注了 ID 字段,在 MongoDB 中,自生成的 ID 是 String 类型的


public class TaskConfig {
@Id private String id; private String name; private String description; private LabelEnum label; private TaskCycleEnum cycleType; private TaskLearnTypeEnum learnType; private String group; private TaskTypeEnum taskTypeEnum; private Boolean isComplete; private Date completeDate;}
复制代码


然后创建一个 Mapper 之类的 Repository 层的接口类,基本功能和 Mapper 差不多


和 Mybatis plus 很像,其中默认封装了很多的基础查询,一些特殊的查询,在接口中自行添加即可


public interface TaskRepository extends MongoRepository<TaskConfig, String> {
TaskConfig findByGroupAndName(final String group, final String name);}
复制代码


如果所示,我们添加了一个方法,是应该数据的 group 和 name 字段进行查看的查询函数,并且只返回一条数据

Controller 层与 Service 层

我们定义一个简单的 Controller 层如下:一个简单的更新接口和查询列表接口


@RestController@RequestMapping("/task")public class TaskController {
private final TaskService taskService;
public TaskController(final TaskService taskService) { this.taskService = taskService; }
@PostMapping("/update") public void update(@RequestBody TaskConfig config) { taskService.update(config); }
@GetMapping("/list") public List<TaskConfig> list() { return taskService.list(); }}
复制代码


具体的 Service 实现如下:


@Servicepublic record TaskService(TaskRepository taskRepository) {
public void update(final TaskConfig config) { final TaskConfig task = taskRepository.findByGroupAndName(config.getGroup(), config.getName()); if (task == null) { taskRepository.insert(config); return; } taskRepository.delete(task); taskRepository.insert(config); }
public List<TaskConfig> list() { return taskRepository.findAll(); }}
复制代码


目前尝鲜使用的是 Java17,体验了一下一些新特性,在上面我们看到在类声明中使用了 record 关键字,直接在类声明中就传入构造函数所需要的参数


感觉目前编程语言的发展趋势是越来越便捷了,目前感觉还不错


在更新接口中,看到我们先去查看数据库中有没有这条数据,没有则插入,有则先删除,再插入


而列表接口,直接一个 findAll 返回所有数据

总结

我们可以看到很多的查询都是内置的,而且我们目前也没有变成任何的复杂的 Sql


spring 提供的这些还是一贯的有助于提升开发效率,在声明特有的语句时,之前用过原生的 MongoDB 查询,就能大致的知道如果使用


发布于: 刚刚阅读数: 2
用户头像

关注

还未添加个人签名 2018.09.09 加入

代码是门手艺活,也是门艺术活

评论

发布
暂无评论
Spring Data MongoDB 使用示例_Java_萧_InfoQ写作社区