游乐游手机版
首页/系统平台/文章详情

SpringBoot整合MongoDB实现CRUD应用开发示例

时间:2026-08-21 17:34
介绍在这篇文章中,我将演示如何使用 Spring Boot 和 MongoDB 构建一个简单的 CRUD REST 应用程序示例。很多人首先会问:MongoDB 是什么?MongoDB是什么?MongoDB 是一种 NoSQL 文档型数据库。在这个数据库中,记录以 document 的形式存储,其结

介绍

在这篇文章中,我将演示如何使用 Spring Boot 和 MongoDB 构建一个简单的 CRUD REST 应用程序示例。很多人首先会问:MongoDB 是什么?

MongoDB是什么?

MongoDB 是一种 NoSQL 文档型数据库。在这个数据库中,记录以 document 的形式存储,其结构与 JSON 对象非常相似,因此本质上可以理解为以键值对方式组织数据。

使用 MongoDB 作为数据库的主要优点包括:

  • MongoDB 是一种无模式的文档数据库,一个集合中可以包含结构不同的文档。
  • 单个对象的数据结构清晰,便于理解和维护。
  • 无需复杂的表连接操作。
  • 具备较强的深度查询能力。
  • 扩展性强,便于横向扩容。

以下是在企业级应用中使用 MongoDB 或类似 NoSQL 数据库的几个常见原因:

  • JSON 数据读取和检索速度更快。
  • 可以很方便地为属性字段添加索引。
  • 支持分片——分片是将数据记录分布到多台机器上的过程。在跨多台机器存储数据时,通常会根据特定规则对数据进行拆分和分区。
  • 数据更新效率高。
  • 查询方式灵活,使用起来更便捷。

先决条件

要创建这个示例应用程序,你需要准备:

  • Spring Boot(版本2.4.1)
  • MongoDB
  • Gradle
  • Ja va

Spring Boot CRUD应用程序

作为本文示例的一部分,我将构建一个基于 REST 的 CRUD 应用程序,其中包括:

  • 一个图书馆场景——我们将在 MongoDB 数据库中创建一个图书馆集合。

  • 我们将按照作者来存储这些图书数据。

  • 用户可以调用 REST API 按作者检索图书。

  • 用户可以调用 REST API 获取图书馆中的所有图书。

  • POST - /v1/mongodbapp/books -添加一本书。

  • GET - /v1/mongodbapp/books——从库中检索所有的图书。

  • GET - /v1/mongodbapp/books/id -检索特定的图书。

  • DELETE—/v1/mongodbapp/books/id—从库中删除一本书。

如何使用MongoDB和Spring Boot CRUD

为了开始创建这个应用程序,我们将使用 Gradle 来管理依赖并完成项目构建。在 Spring Boot 应用程序中添加以下依赖项:

implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-web'

添加这些依赖之后,我们就具备了连接 MongoDB 数据库的基础能力。不过此时还需要配置数据库地址。我们会在 application.properties 中加入所需属性,如下所示:

spring.data.mongodb.host = localhostspring.data.mongodb.port=27017 spring.data.mongodb.database=library

这样就可以连接到运行在 localhost 主机、27017 端口上的 MongoDB 数据库,数据库名称为 library。

定义数据模型

在这个图书馆示例中,我们需要先定义书籍数据。核心数据对象是 Book。该数据模型将包含书名、作者和 ISBN 等字段。具体内容如下:​​​​​​​

package com.betterja vacode.mongodbdemo.mongodbapp.models;
import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;


@Document(collection = "books")public class Book{ @Id private String id;
private String title; private String author; private String isbn;
public Book() {
}
public Book(String title, String author, String isbn) { this.title = title; this.author = author; this.isbn = isbn; }
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
public String getIsbn() { return isbn; }
public void setIsbn(String isbn) { this.isbn = isbn; }}

由于这里使用的是 MongoDB,因此通过 @Document 注解来指定对应的 books 集合。

添加Repository接口

我们需要一个 Repository 接口来完成 book 对象的查询、保存和删除操作。在 repositories 包中,我们将添加 BookRepository 接口:​​​​​​​

package com.betterja vacode.mongodbdemo.mongodbapp.repositories;
import com.betterja vacode.mongodbdemo.mongodbapp.models.Book;import org.springframework.data.mongodb.repository.MongoRepository;
import ja va.util.List;
public interface BookRepository extends MongoRepository{ List findByTitleContaining(String title); List findByAuthor(String name);}

这个 Repository 接口中包含两个方法:一个可根据标题关键字查询图书,另一个可根据作者姓名查询图书。

添加Spring REST API控制器

现在,为了让应用具备 REST CRUD 能力,我们需要添加一个 REST 控制器。这个控制器将包含 POST、PUT、GET 和 DELETE API。​​​​​​​

package com.betterja vacode.mongodbdemo.mongodbapp.controller;
import com.betterja vacode.mongodbdemo.mongodbapp.models.Book;import com.betterja vacode.mongodbdemo.mongodbapp.repositories.BookRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;
import ja va.util.ArrayList;import ja va.util.List;import ja va.util.Optional;
@CrossOrigin("https://localhost:8080")@RestController@RequestMapping("/v1/mongodbapp")public class BookController{ @Autowired BookRepository bookRepository;
@GetMapping("/books") public ResponseEntity getAllBooks(@RequestParam(required = false) String bookTitle) { try { List listOfBooks = new ArrayList<>(); if(bookTitle == null || bookTitle.isEmpty()) { bookRepository.findAll().forEach(listOfBooks::add);} else { bookRepository.findByTitleContaining(bookTitle).forEach(listOfBooks::add); }
if (listOfBooks.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); }
return new ResponseEntity<>(listOfBooks, HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } }
@GetMapping("/books/{id}") public ResponseEntity getBookById(@PathVariable("id") String id) { try { Optional bookOptional = bookRepository.findById(id);
return new ResponseEntity<>(bookOptional.get(), HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } }
@PostMapping("/books") public ResponseEntity addABookToLibrary(@RequestBody Book book) { try { Book createdBook = bookRepository.sa ve(new Book(book.getTitle(), book.getAuthor(), book.getIsbn())); return new ResponseEntity<>(createdBook, HttpStatus.CREATED); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } }
@PutMapping("/books/{id}") public ResponseEntity updateABook(@PathVariable("id") String id, @RequestBody Book book) { Optional bookOptional = bookRepository.findById(id);
if (bookOptional.isPresent()) { Book updatedBook = bookOptional.get(); updatedBook.setTitle(book.getTitle()); updatedBook.setAuthor(book.getAuthor()); updatedBook.setIsbn(book.getIsbn()); return new ResponseEntity<>(bookRepository.sa ve(updatedBook), HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } }
@DeleteMapping("/books/{id}") public ResponseEntity deleteABook(@PathVariable("id") String id) { try { bookRepository.deleteById(id); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (Exception e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }}

BookController 是我们的 REST 控制器类。它主要包括:

  • @RestController -将其标记为 REST 控制器。
  • @CrossOrigin -这个注解用于允许跨源资源共享(CORS)。它会在 REST 响应中加入 CORS 访问控制头。这些头信息非常重要,因为它不仅允许服务器指定哪些来源可以访问资源,还可以定义访问资源的方式。
  • 我们添加了不同的方法——addABookToLibrary 用于将书籍保存到数据库,getAllBooks 用于从数据库中查询书籍。

完整的演示

现在我们已经添加了 REST 控制器和 Repository 接口方法,接下来就可以构建并运行这个 Spring Boot + MongoDB 应用程序。作为演示的一部分,我将使用 POSTMAN 来访问这些 API 接口。

你可以通过命令行或正在使用的代码编辑器来构建应用程序。我个人更喜欢使用命令行,因此已经完成了应用构建。编译完成后,你可以像下面这样运行程序:

ja va -jar mongodbapp-0.0.1-SNAPSHOT.jar

接下来,让我们使用 POSTMAN 向图书馆中添加一本书。

如上图所示,我们成功添加了一本书,接口响应中会返回数据库里刚刚新增的图书信息。

下面的 API 是一个 GET API,用于从数据库中获取所有书籍。

现在,为了演示如何从图书馆中删除图书,我们将使用 DELETE API。

结论

这篇文章展示了如何在使用 MongoDB 数据库的前提下,借助 Spring Boot 快速构建一个 REST API 和 CRUD 应用。整体实现方式与常规 SQL 数据库场景比较接近,但在接入 NoSQL 数据库时,仍然需要根据文档型数据库的特点做出相应调整。

​​​​​​​

来源:https://apiv1.oschina.net/oschinapi/blog/detail?id=4967233
上一篇Kubernetes稳定性保障极简手册与实践指南 下一篇Serverless任务调度的变化与蚂蚁集团落地实践解析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
系统平台 · 2026-09-01

VMware安装Ubuntu完整教程:创建虚拟机与启动验证

本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。

Win10专业版U盘安装教程:制作启动盘与完整安装步骤
系统平台 · 2026-09-01

Win10专业版U盘安装教程:制作启动盘与完整安装步骤

本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。

Windows10系统字体太小怎么调大
系统平台 · 2026-08-27

Windows10系统字体太小怎么调大

Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。

Win10磁盘占用100%基础排查:从监控到清理的完整步骤
系统平台 · 2026-08-27

Win10磁盘占用100%基础排查:从监控到清理的完整步骤

Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。

Windows10系统怎么显示此电脑和控制面板
系统平台 · 2026-08-27

Windows10系统怎么显示此电脑和控制面板

Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。