当前位置: 首页 > news >正文

MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

阿丹:

        之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。

  传送门:

MongoDB文档--基本概念_一单成的博客-CSDN博客

MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客

MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客

MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句_一单成的博客-CSDN博客

MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找_一单成的博客-CSDN博客

MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoTemplate完成增删改查_一单成的博客-CSDN博客

使用技术介绍:

        概念说明:

        spring-data-mongodb 提供 MongoTemplate 与 MongoRepository两种操作方式
MongoRepository 操作简单 缺点是不够灵活
MongoTemplate 操作灵活,在项目中可以灵活使用这两种方式

MongoTemplate 

        MongoTemplate是Spring Data MongoDB项目的一部分,它是一个Spring的扩展,为使用MongoDB数据库的应用程序提供了抽象层。MongoTemplate提供了一个简单而强大的方法来执行各种数据库操作,而无需编写低级别的MongoDB驱动程序代码。

MongoTemplate的主要功能包括:

  1. 插入和更新文档:MongoTemplate提供了一种方便的方法来插入和更新MongoDB数据库中的文档。
  2. 查询文档:MongoTemplate提供了多种查询方法,可以使用各种查询参数来检索数据库中的文档,包括查询条件、排序、限制和投影。
  3. 聚合操作:MongoTemplate支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
  4. 索引管理:MongoTemplate可以创建、删除和查询数据库索引。
  5. 命令和操作:MongoTemplate还支持各种数据库命令和操作,如计算数据库统计信息、执行存储过程等。

使用MongoTemplate可以简化MongoDB数据库操作的开发工作,提供更高的生产力和更好的可维护性。

MongoRepository

MongoRepository是Spring Data MongoDB项目中的另一个抽象层,它是基于MongoTemplate的更高级别的抽象。MongoRepository提供了一个基于注解的接口,用于定义与MongoDB数据库的交互。通过使用MongoRepository,你可以专注于定义数据访问逻辑,而无需编写低级别的数据库操作代码。

MongoRepository的主要功能包括:

  1. 查询文档:MongoRepository提供了一种方便的方法来查询数据库中的文档。通过使用注解,你可以定义查询条件、排序、限制和投影。
  2. 聚合操作:MongoRepository支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
  3. 分页查询:MongoRepository提供了分页查询功能,可以限制查询结果的数量并获取下一页的结果。
  4. 自定义查询:如果你需要执行更复杂的查询操作,MongoRepository还提供了自定义查询的方法,可以编写存储过程或使用MongoDB的查询语言执行自定义查询。

使用MongoRepository可以使你的代码更加简洁和可维护,因为它提供了一种声明式的方式来访问MongoDB数据库。通过注解和自动实现的接口,你可以专注于实现业务逻辑,而无需关心底层的数据库操作细节。

spring-boot中使用MongoRepository进行增删改查

阿丹:

        使用MongoRepository的好处是和 MyBatis-Plus很像提供了很多经过封装好的方法。很方便(对于简单的增删改查来说)。但是我发现竟然没有!!修改的封装好的用法。

1、引入依赖

 核心依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

这个依赖是Spring Boot提供的用于与MongoDB数据库进行交互的starter依赖。它包含了所需的库和依赖项,以便在使用Spring Boot开发应用程序时方便地使用MongoDB。

具体来说,这个依赖提供了以下功能:

  1. 自动配置:Spring Boot会自动配置与MongoDB数据库的连接,包括创建Mongo客户端、设置连接属性等。
  2. MongoTemplate:自动配置了MongoTemplate,这是一个用于执行各种数据库操作的核心类。通过使用MongoTemplate,你可以方便地进行文档的插入、更新、查询等操作。
  3. MongoRepository:自动配置了MongoRepository,这是一个基于注解的接口,用于定义与MongoDB数据库的交互。通过继承MongoRepository,你可以方便地进行查询、聚合操作等。
  4. 模板化操作:通过使用MongoTemplate和MongoRepository,你可以以模板化的方式执行数据库操作,这使得代码更加简洁、可读性更好。

总之,通过添加这个依赖,可以方便地使用Spring Boot与MongoDB进行集成,而无需手动配置和编写低级别的数据库操作代码。

其他依赖:(如果小伙伴想直接开启一个简单的spring-boot项目可直接拿走)

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</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-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies>

2、写入连接MongoDB配置文件采用application.yml文件

spring:data:mongodb:host: 127.0.0.1 #指定MongoDB服务地址port: 27017 #指定端口,默认就为27017database: article#指定使用的数据库(集合)authentication-database: admin # 登录认证的逻辑库名username:  #用户名password:  #密码

注意:

        如果没有设置连接的用户的话可以根据实际情况删除一部分配置文件。

        相对于MySQL不一样的是:在MySQL中一个用户可以管理多个数据库,但是MongoDB每个库都要一个独立的管理用户,连接的时候需要输入对应的用户密码。

3、有关实体类的书写(有坑注意!!)

主要注解:

         1、@Document,对应MongoDB中的文档,也就是数据库中的最基本的数据单元,由键值对组成,类似于JSON格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。

        2、@Id(主键):用来将成员变量的值映射为文档的_id的值,可以看我之前的文档有讲到如何给_id赋值。

        3、@Index(索引):索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据文档中的数据进行排序。索引可以大大提高文档查询效率。

        4、@Field(字段):文档中的字段,类似于MySQL中的列概念。

        5、@Aggregation(聚合):聚合主要用于数据处理,例如统计平均值、求和等。

示例:

package com.adn.mongodb.common;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;/*** 阿丹实体类* */
@Data
@Document(collection = "ExampleDB")
public class Adn {@Id@Field("_id")private Long id;//阿丹主键@Field("name")private String name;//阿丹名称@Field("gender")private String gender;//阿丹性别@Field("specialty")private String specialty;//特长描述
}

示例中的 Document就是集合的名字

注意:

        一定要去写@Field("name")这个注解,映射到字段的名字,不然查到的都是空!!!

4、使用MongoRepository来完成简单增删改查

这个都是底层封装好的代码,这里直接上代码!如果有疑惑欢迎评论区讨论一下子 

controller控制层

package com.adn.mongodb.controller;import com.adn.mongodb.common.Adn;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 控制层器* */
@RestController
public class MongodbController {@Autowiredprivate MongodbService mongodbService;/*** 根据id来进行查询* */@GetMapping("/adn/{id}")public Adn  adn(@PathVariable String  id) {System.out.println(id);return mongodbService.adn(id);}/*** 增加数据插入数据* */@PostMapping("/save")public Adn  save(@RequestBody Adn adn) {return mongodbService.save(adn);}// @RequestMapping("/adn")// public String adn() {/*** 修改* */@PutMapping("/update")public Adn update(@RequestBody Adn adn) {return mongodbService.update(adn);}/*** 插入因为没有对应的方法,所以使用单查询+删除+新增来处理* *//*** 删除* */@DeleteMapping("/delete/{id}")public void delete(@PathVariable String id) {mongodbService.delete(id);}}

service层接口

package com.adn.mongodb.service;import com.adn.mongodb.common.Adn;public interface MongodbService {Adn adn(String id);Adn save(Adn adn);Adn update(Adn adn);void delete(String id);
}

service层实现类

package com.adn.mongodb.service.Impl;import com.adn.mongodb.common.Adn;
import com.adn.mongodb.mapper.AdnMapper;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.stereotype.Service;import java.util.Optional;@Service
public class MongodbServiceImpl implements MongodbService {@Autowiredprivate AdnMapper adnMapper;@Overridepublic Adn adn(String id) {Adn res = null;Optional<Adn> byId = adnMapper.findById(id);System.out.println(byId);boolean present = byId.isPresent();if(present){res = byId.get();}return res;}@Overridepublic Adn save(Adn adn) {return adnMapper.save(adn);}@Overridepublic Adn update(Adn adn) {return adnMapper.updata(adn);}@Overridepublic void delete(String id) {adnMapper.deleteById(id);}}

dao层(我因为习惯所以写了mapper)

重点:要继承MongoRepository这个类!!!

package com.adn.mongodb.mapper;import com.adn.mongodb.common.Adn;
import org.springframework.data.mongodb.repository.MongoRepository;import java.util.Optional;public interface AdnMapper extends MongoRepository<Adn, String> {}

相关文章:

MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

阿丹&#xff1a; 之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。 传送门&#xff1a; MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装&#xff08;mongodb环境搭建&#xff09;-docker安装&#xff08;挂载数据卷…...

什么是线程局部变量?

在Java中&#xff0c;线程局部变量(Thread Local Variable)是一种特殊类型的变量&#xff0c;每个线程都有其自己独立的副本。这意味着每个线程可以在该变量上进行操作&#xff0c;而不会影响其他线程的副本。线程局部变量通常用于在多线程环境中存储线程私有的数据&#xff0c…...

Jmeter响应中的乱码问题

文章目录 问题描述解决办法 问题描述 Jmeter在访问接口的时候&#xff0c;响应内容如果有中文可能会显示乱码 响应页面没有做编码处理&#xff0c;JMeter默认按照ISO-8859-1编码格式进行解析 解决办法 在线程组中添加BeanShell PostProcessor后置处理器 prev.setDataEnco…...

MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找

阿丹&#xff1a; 之前研究了MongoDB的基础增删改查。在学会基础的数据库增删改查肯定是不够的。这个时候就涉及到了数据库搜索的时候的效率。需要提高数据的搜索效率。 MongoDB索引 在所以数据库中如果没有数据索引的时候。如果需要查找到一些数据。都会去主动扫描所有可能存…...

CentOS下ZLMediaKit的可视化管理网站MediaServerUI使用

一、简介 按照 ZLMediaKit快速开始 编译运行ZLMediaKit成功后&#xff0c;我们可以运行其合作开源项目MediaServerUI&#xff0c;来对ZLMediaKit进行可视化管理。通过MediaServerUI&#xff0c;我们可以实现在浏览器查看ZLMediaKit的延迟率、负载率、正在进行的推拉流、服务器…...

回归预测 | MATLAB实现POA-CNN-BiGRU鹈鹕算法优化卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiGRU鹈鹕算法优化卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiGRU鹈鹕算法优化卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-BiGRU鹈鹕…...

Rust 原生支持龙架构指令集

导读近日&#xff0c;Rust 开源社区发布 1.71.0 版本&#xff0c;实现对龙架构&#xff08;LoongArch&#xff09;指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载 Rust 开源社区发布的龙架构二进制版本。Rust 开发者将在龙架构平台上获得…...

为生成式AI提速,亚马逊云科技Amazon EC2 P5满足GPU需求

生成式AI&#xff08;Generative AI&#xff09;已经成为全球范围内的一个重要趋势&#xff0c;得到越来越多企业和研究机构的关注和应用。纽约时间7月26日&#xff0c;亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian在亚马逊云科技举办的纽约峰会上更…...

聊聊企业数据安全那些事~

保护企业数据安全的重要性与方法 随着信息技术的快速发展&#xff0c;企业数据的安全性变得越来越重要。在数字化时代&#xff0c;企业的核心业务和关键信息都存储在电脑系统中&#xff0c;一旦遭受到数据泄露、黑客攻击或恶意软件感染&#xff0c;将可能对企业造成严重的损害…...

日常随笔——如何把excel题库转换为word打印格式

将Excel题库转换为Word可以通过编程的方式实现。以下是一个使用Python的示例代码&#xff0c;该代码使用openpyxl库读取Excel文件&#xff0c;并使用python-docx库创建和保存Word文档。 首先&#xff0c;请确保已经安装了 openpyxl 和 python-docx 库。可以使用以下命令进行安…...

SpringCloud项目打包注意事项以及可能出错的几种情况

SpringCloud项目打包注意事项和可能出错的几种情况 1、检查子模块中的 parent的pom文件路径 \<relativePath/\>2、检查打包插件的位置3、检查module是否重复引用 欢迎访问我的个人博客&#xff1a;https://wk-blog.vip 1、检查子模块中的 parent的pom文件路径 <relat…...

ZABBIX 6.4 Mysql数据库分表

ZABBIX监控设备较多的时候&#xff0c;Mysql数据库容易成为性能的瓶颈&#xff0c;可以通过数据库分表的方式来进行优化。步骤如下&#xff1a; 一、停用zabbix服务 # 避免修改分区表时&#xff0c;数据还有写入 systemctl stop zabbix 二、备份MySQL zabbix DB 避免修改分…...

多线程-Runable和Callable的区别

在Java中&#xff0c;多线程可以通过实现Runnable接口或使用Callable接口来实现。这两种方式有一些区别&#xff0c;如下所示&#xff1a; 返回值&#xff1a; Runnable接口的run()方法没有返回值&#xff0c;它表示一个没有返回结果的任务。Callable接口的call()方法有返回值…...

智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异

智慧城市作为人类社会发展的新阶段&#xff0c;正日益引领着我们迈向数字化未来的时代。在智慧城市的建设过程中&#xff0c;地理信息系统&#xff08;GIS&#xff09;扮演着举足轻重的角色。而在GIS的发展中&#xff0c;二维和三维GIS作为两大核心技术&#xff0c;在城市规划与…...

Python入门自学进阶-Web框架——38、redis、rabbitmq、git

缓存数据库redis&#xff1a; NoSQL&#xff08;Not only SQL&#xff09;泛指非关系型的数据库。为了解决大规模数据集合多重数据类的挑战。 NoSQL数据库的四大分类&#xff1a; 键值&#xff08;Key-Value&#xff09;存储数据库列存储数据库文档型数据库图形&#xff08;…...

论 SoC上的Linux如何拉动外部I/O

在MCU中&#xff08;如classic autosr或其他RTOS&#xff09;&#xff0c;一般可以直接通过往对应的寄存器&#xff08;地址转为指针&#xff09;写值&#xff0c; 或者调用一些硬件抽象层或者驱动接口来拉动芯片提供的GPIO。 但是在Linux中&#xff0c;可能不会让应用层直接去…...

SpringBoot项目如何部署SSL证书 (JKS格式)

1、SpringBoot项目如何部署SSL证书 (JKS格式) 1. 获取 SSL 证书和私钥 首先&#xff0c;你需要获取有效的 SSL 证书和私钥。SSL 证书是一种用于加密通信的数字证书&#xff0c;它可以通过购买商业 SSL 证书或使用免费的 Let’s Encrypt 证书获得。请确保你拥有证书文件和与之…...

成功解决:ValueError Cannot assign non-leaf Tensor to parameter ‘weight‘

成功解决:ValueError Cannot assign non-leaf Tensor to parameter ‘weight‘ 欢迎大家来到安静到无声的《模式识别与人工智能(程序与算法)》,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解 - 总目录,同时这也可以作为大家学习的参考。欢迎订阅,优…...

面试之快速学习SQL-基础增删改查语句

1. SELECT SELECT column1,column2,column3 FROM table_name;SELECT * FROM table_name;2. SQL SELECT DISTINCT 语句 在表中&#xff0c;可能会包含重复值。这并不成问题&#xff0c;不过&#xff0c;有时您也许希望仅仅列出不同&#xff08;distinct&#xff09;的值。 SE…...

nuxt脚手架创建项目

在初始化时遇到一个依赖找不到的问题&#xff0c;记录一下&#xff0c;如有遇到同样问题的小伙伴&#xff0c;希望能给你们一点指引。 从安装脚手架开始&#xff0c;首先 一&#xff1a;安装nuxt脚手架 1. C盘全局安装&#xff1a; npm i -g create-nuxt-app 安装后可creat…...

复现原型链污染漏洞

目录 一、复现原型链污染漏洞 hackit 2018 1、创建hackit_2018.js文件 2、运行hackit_2018.js文件 3、寻找原型链漏洞 4、污染原型链 hackit 2018 1、创建hackit_2018.js文件 const express require(express) var hbs require(hbs); var bodyParser require(body-par…...

.Net6 Web Core API 配置 Autofac 封装 --- 依赖注入

目录 一、NuGet 包导入 二、Autofac 封装类 三、Autofac 使用 四、案例测试 下列封装 采取程序集注入方法, 单个依赖注入, 也适用, 可<依赖注入>的地方配置 一、NuGet 包导入 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy 二、Auto…...

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目…...

【搭建PyTorch神经网络进行气温预测】

import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inlinefeatures pd.read_csv(temps.csv)#看看数据长什么样子 features.head…...

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt

目录 一、引入 NuGet 包 二、配置log4net.config 三、编写Log4net封装类 四、编写日志记录类 五、AOP -- 拦截器 -- 封装 六、案例编写 七、结果展示 一、引入 NuGet 包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore MySql.Data ---- MySQL…...

【论文阅读】对抗溯源图主机入侵检测系统的模仿攻击(NDSS-2023)

作者&#xff1a;伊利诺伊大学芝加哥分校-Akul Goyal、Gang Wang、Adam Bates&#xff1b;维克森林大学-Xueyuan Han、 引用&#xff1a;Goyal A, Han X, Wang G, et al. Sometimes, You Aren’t What You Do: Mimicry Attacks against Provenance Graph Host Intrusion Detect…...

微信小程序多图片上传实用代码记录

微信小程序多图片上传实用代码记录 由于在小程序中&#xff0c;wx.uploadFile 只能一次上传一张图片&#xff0c;因此在一次需要上传多张图片的应用场景中例如商品图片上传、评论图片上传等场景下&#xff0c;不得不使用for等循环上传每一张图片&#xff0c;多次调用wx.upload…...

android实现获取系统全局对象实例

无需Context获取系统常用全局对象&#xff1a;Application&#xff0c;Activity&#xff0c;PackageManager等。 import android.app.Activity; import android.app.Application; import android.app.Service; import android.content.Context; import android.content.pm.Pac…...

viewerjs 如何新增下载图片功能(npm包补丁)

文章目录 先实现正常的效果实现下载图片改变viewerjs的build函数源码改变之后&#xff0c;执行npm i 之后node_modules源码又变回了原样 1、viwerjs所有功能都很完善&#xff0c;但唯独缺少了图片的下载 2、需求&#xff1a;在用viwerjs旋转图片后&#xff0c;可以直接下载旋转…...

基于YOLOv7开发构建MSTAR雷达影像目标检测系统

MSTAR&#xff08;Moving and Stationary Target Acquisition and Recognition&#xff09;数据集是一个基于合成孔径雷达&#xff08;Synthetic Aperture Radar&#xff0c;SAR&#xff09;图像的目标检测和识别数据集。它是针对目标检测、机器学习和模式识别算法的研究和评估…...