Spring Boot教程之四十九:Spring Boot – MongoRepository 示例

Spring Boot – MongoRepository 示例

Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是一个基于微服务的框架,在其中创建生产就绪的应用程序只需很少的时间。以下是 Spring Boot 的一些功能:

  • 它可以避免 Spring 中繁重的 XML 配置
  • 它可以轻松维护和创建 REST 端点
  • 它包括嵌入式 Tomcat 服务器
  • 部署非常容易,war和jar文件可以轻松部署在tomcat服务器中

MongoRepository介绍

MongoRepository 来管理 Spring Boot 应用程序中的数据

MongoRepository 是 Spring Data 在org.springframework.data.mongodb.repository包中提供的一个接口。MongoRepository 扩展了PagingAndSortingRepositoryQueryByExampleExecutor接口,这两个接口进一步扩展了CrudRepository接口。MongoRepository 提供了创建 CRUD 应用程序所需的所有方法,并且还支持自定义派生查询方法。

句法:

public interface MongoRepository<T,ID> extends PagingAndSortingRepository<T,ID>, QueryByExampleExecutor<T>

这里:

  • T:存储库管理的域类型(通常是实体/模型类名)
  • ID:存储库管理的实体的 id 类型(通常是在实体/模型类中创建的 @Id 的包装类)

插图:

public interface BookRepo extends MongoRepository<Book, Integer> {}

方法

JpaRepository 中的一些最重要的方法如下

方法 1: saveAll():保存所有给定的实体。

句法:

<S extends T> List<S> saveAll(Iterable<S> entities)

参数:实体,不能为空,也不能包含空。

返回类型:已保存的实体;永远不会为空。返回的 Iterable 将具有与作为参数传递的 Iterable 相同的大小。

抛出异常:如果给定的实体或其某个实体为空,则抛出IllegalArgumentException 。

方法 2: insert():插入给定的实体。假设实例是新的,以便能够应用插入优化。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。 

句法:

<S extends T> S insert(S entity)

参数:entity – 不能为空

返回类型:已保存的实体

方法3. findAll():返回该类型的所有实例。

句法:

Iterable<T> findAll()

返回类型:所有实体

执行:

我们将制作一个 Spring Boot 应用程序,使用 MongoRepository 管理 Book 实体。数据保存在 MongoDB 数据库中。我们使用 RESTful 控制器。

步骤1:使用IntelliJ IDEA创建Spring Boot项目,创建一个Spring Boot项目。 

第 2 步:添加以下依赖项

  • Spring Web
  • MongoDB
  • Lombok
  • DevTools

以下是pom.xml文件的完整代码。 

  • XML

<?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.0</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

    

    <groupId>com.globallogic</groupId>

    <artifactId>spring-mongodb</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>spring-mongodb</name>

    <description>Demo project for Spring Boot</description>

    <properties>

        <java.version>11</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-devtools</artifactId>

            <scope>runtime</scope>

            <optional>true</optional>

        </dependency>

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <optional>true</optional>

        </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>

                <configuration>

                    <excludes>

                        <exclude>

                            <groupId>org.projectlombok</groupId>

                            <artifactId>lombok</artifactId>

                        </exclude>

                    </excludes>

                </configuration>

            </plugin>

        </plugins>

    </build>

  

</project>

步骤 3:创建 3 个包并在这些包中创建一些类和接口,如下图所示

  • model
  • repository
  • controller

注意

  • 绿色圆形图标“I”按钮是界面
  • 蓝色圆形图标“C”按钮属于类

步骤 4:实体包内部

在 Book.java 文件中创建一个简单的POJO 类。

  • Java

// Java Program to Illustrate Book File

  

// Importing required classes

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.springframework.data.annotation.Id;

import org.springframework.data.mongodb.core.mapping.Document;

  

// Annotations

@Data

@NoArgsConstructor

@AllArgsConstructor

@Document(collection = "Book")

  

// Class

public class Book {

  

    // Attributes

    @Id 

    private int id;

    private String bookName;

    private String authorName;

}

步骤 5:存储库包内部

创建一个简单的接口并将该接口命名为BookRepo 。正如我们上面讨论的那样,这个接口将扩展MongoRepository 。

  • Java

// java Program to Illustrate BookRepo File

  

import com.globallogic.spring.mongodb.model.Book;

import org.springframework.data.mongodb.repository.MongoRepository;

  

public interface BookRepo

    extends MongoRepository<Book, Integer> {

}

步骤 6:控制器包装内部

在包内创建一个名为BookController 的类。

  • Java

import com.globallogic.spring.mongodb.model.Book;

import com.globallogic.spring.mongodb.repository.BookRepo;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

  

import java.util.List;

  

// Annotation 

@RestController

  

// Class 

public class BookController {

  

    @Autowired

    private BookRepo repo;

  

    @PostMapping("/addBook")

    public String saveBook(@RequestBody Book book){

        repo.save(book);

        

        return "Added Successfully";

    }

  

    @GetMapping("/findAllBooks")

    public List<Book> getBooks() {

        

        return repo.findAll();

    }

  

    @DeleteMapping("/delete/{id}")

    public String deleteBook(@PathVariable int id){

        repo.deleteById(id);

        

        return "Deleted Successfully";

    }

  

}

步骤 7:下面是 application.properties 文件的代码

server.port = 8989# MongoDB Configuration
server.port:8989
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=BookStore

第 8 步:了解 MongoDB Compass

转到 MongoDB Compass 并创建一个名为BookStore 的数据库,然后在数据库中创建一个名为Book 的集合,如下图所示

现在运行您的应用程序,让我们在 Postman 中测试端点,并参考我们的 MongoDB Compass。

在 Postman 中测试端点

端点 1: POST – http://localhost:8989/addBook

端点 2: GET – http://localhost:8989/findAllBooks

端点 3:删除 – http://localhost:8989/delete/1329

最后,MongoDB Compass 如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504309.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试ip端口-telnet开启与使用

前言 开发过程中我们总会要去测试ip通不通&#xff0c;或者ip下某个端口是否可以联通&#xff0c;为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错&#xff0c;不是内部命令&#xff0c;可以如下开启&#xff1a; 1、打开控制面板&#xff…

SpringBoot3动态切换数据源

背景 随着公司业务战略的发展&#xff0c;相关的软件服务也逐步的向多元化转变&#xff0c;之前是单纯的拿项目&#xff0c;赚人工钱&#xff0c;现在开始向产品化\服务化转变。最近雷袭又接到一项新的挑战&#xff1a;了解SAAS模型&#xff0c;考虑怎么将公司的产品转换成多租…

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…

通过 route 或 ip route 管理Linux主机路由

目录 一&#xff1a;route 使用说明1、查看路由信息2、删除指定路由3、增加指定路由 二&#xff1a;ip route 使用说明1、查看主机路由2、新增主机路由3、删除主机路由 通过route 或者ip route修改Linux主机路由后属于临时生效&#xff0c;系统重启后就恢复默认值了&#xff0c…

el-table表格合并某一列

需求&#xff1a;按照下图完成单元格合并&#xff0c;数据展示 可以看到科室列是需要合并的 并加背景色展示&#xff1b;具体代码如下&#xff1a; <el-tableref"tableA":data"tableDataList":header-cell-style"{ backgroundColor: #f2dcdb, col…

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…

数据结构:包装类和泛型

目录 一、包装类 1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、泛型 1、什么是泛型 2、泛型语法 3、泛型类 4、擦除机制 5、泛型的上界 6、泛型方法 三、通配符 1、什么是通配符 2、通配符上界 3、通配符下界 &#x1f4da…

备考蓝桥杯:顺序表相关算法题

目录 询问学号 寄包柜 移动0 颜色分类 合并两个有序数组 物品移动 询问学号 我们的思路&#xff1a;创建一个顺序表存储从1开始依次存放进入教室的学生学号&#xff0c;然后查询 #include <iostream> #include <vector> using namespace std; const int N 2…

Python入门教程 —— 网络编程

1.网络通信概念 简单来说,网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。 使用网络的目的,就是为了联通多方然后进行通信,即把数据从一方传递给另外一方。 前面的学习编写的程序都是单机的,即不能和其他电脑上的程…

C#异步多线程——ThreadPool线程池

C#实现异步多线程的方式有多种&#xff0c;以下总结的是ThreadPool的用法。 线程池的特点 线程池受CLR管理&#xff0c;线程的生命周期&#xff0c;任务调度等细节都不需要我们操心了&#xff0c;我们只需要专注于任务实现&#xff0c;使用ThreadPool提供的静态方法把我们的任…

68.基于SpringBoot + Vue实现的前后端分离-心灵治愈交流平台系统(项目 + 论文PPT)

项目介绍 本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述心灵治愈交流平台的当前背景以及系统开发的目的&#xff0c;后续章节将严格按照软件开发流程&#xff0c;对系统进…

Linux(上):基本知识篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux初识1 Linux简介2 Linux学习环境配置(1)安装Linux(2)FinalShell远程连接Linux服务器二、Linux基础命令1 Linux目录结构,根目录 /2 Linux命令基础(1)什么是命令、命令行?(2)…

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象

Python中的可变对象与不可变对象&#xff1b;Python中的六大标准数据类型哪些属于可变对象&#xff0c;哪些属于不可变对象 Python中的可变对象与不可变对象一、Python的六大标准数据类型1. 数字类型 (Number)2. 字符串 (String)3. 列表 (List)4. 元组 (Tuple)5. 集合 (Set)6. …

VSCode Live Server 插件安装和使用

VSCode Live Server是一个由Ritwick Dey开发的Visual Studio Code扩展插件&#xff0c;它提供了一个带有实时重载功能的本地开发服务器。在VSCode中安装和使用Live Server插件进行实时预览和调试Web应用程序。这将大大提高前端开发效率&#xff0c;使网页设计和开发变得更为流畅…

Personal APP

1、Matlab 2023b https://www.bilibili.com/opus/887246540317392920 https://blog.csdn.net/qq_25719943/article/details/138096918 https://www.jokerdown.com/22886.html 2、Jlink使用技巧 J-Scope虚拟示波器功能 Jlink使用技巧之J-Scope虚拟示波器功能 - 知乎 (zhihu.…

【马来西亚理工大学主办,ACM出版】2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)

2025年大数据、通信技术与计算机应用国际学术会议&#xff08;BDCTA 2025) 2025 International Conference on Big Data, Communication Technology and Computer Applications 2025年2月14-16日 | 马来西亚-吉隆坡 大会官网&#xff1a;更多详情【论文投稿】 主办单位&…

Sprint Boot教程之五十:Spring Boot JpaRepository 示例

Spring Boot JpaRepository 示例 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是一个基…

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…

左神算法基础巩固--3

文章目录 二叉树二叉树的遍历先序遍历中序遍历后序遍历 解答二叉树的宽度优先遍历 在这里插入图片描述 一颗完全二叉树具有以下特征&#xff1a;1.不存在任何一个节点具有右子树但不存在左子树.2.不存在任何一个节点在满足1的情况下左右子树不全且其后续节点不为叶子节点 根据以…

推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛

随着语音技术在各领域应用的迅速扩展&#xff0c;全球语言与口音的多样性成为技术进一步突破的重大挑战。为了应对这一难题&#xff0c;来自卡内基梅隆大学&#xff08;CMU&#xff09;、斯坦福大学&#xff08;Stanford University&#xff09;、乔治梅森大学(George Mason Un…