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

Springboot 集成 MongoDB

在SpringBoot项目中集成MongoDB后的一些基本操作。

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

本文介绍的内容是Springboot如何集成MongoDB,以及对MongoDB进行基本的增加、查询数据的操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MongoDB是什么?

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSql 数据库中比较热门的一种。MongoDB 中的一条记录就是一个文档,与JSON类似。
 

二、使用步骤一

1、引入库

代码如下(示例):

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

2、配置Mongodb连接地址

代码如下(示例):

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/admin 


3、创建实体类:

package com.hjxmongodb.mongdb.entity;import org.springframework.data.mongodb.core.mapping.Document;import lombok.Data;/**
* 包名称:com.hjxmongodb.mongdb.entity
* @version 创作时间:2023年11月6日上午11:16:04
*
*/
@Document
@Data
public class User {private String id;private String name;private int age;private String gender;private String email;}

4、创建自己的Repository接口类并实现 MongoRepository 接口

package com.hjxmongodb.mongdb.repository;import org.springframework.data.mongodb.repository.MongoRepository;import com.hjxmongodb.mongdb.entity.User;/**
* 包名称:com.hjxmongodb.mongdb.repository
* @version 创作时间:2023年11月9日上午10:16:06
*
*/public interface UserRepository extends MongoRepository<User, String> {}

5、增加、查询数据

查询代码如下:

package com.hjxmongodb.mongdb;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.UUID;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;import com.hjxmongodb.mongdb.entity.User;
import com.hjxmongodb.mongdb.repository.UserRepository;/**
* 包名称:com.hjxmongodb.mongdb
* @version 创作时间:2023年11月9日上午10:58:19
*
*/@SpringBootTest
public class MongoRepositoryTest {@Autowiredprivate UserRepository userRepository;/*** 批量增加数据* 使用MongoRepository 批量插入数据*/@Testvoid createUsers() {Random random = new Random();Collection<User> userList = new ArrayList<User>();for (int i = 0; i < 100000; i++) {User user = new User();user.setId(UUID.randomUUID().toString().replace("-", ""));user.setAge(random.nextInt(22, 50));user.setGender(random.nextInt(0, 2)+"");user.setName("hjx" + random.nextInt(10000));user.setEmail("hjx"+random.nextInt(10000)+"wm@163.com");userList.add(user);}System.out.println("批量插入数据:" + userList.size());userList = userRepository.insert(userList);System.out.println("保存成功 : " + userList.size());}@Testvoid findUser() {System.out.println("使用MongoRepository 来查询数据...");//查询所有的数据List<User> userList =userRepository.findAll();for (User user : userList) {System.out.println(user);}//根据ID查询单个数据Optional<User> user = userRepository.findById("f777728d4779450e81c30fcf2c38dfe0");System.out.println(user.get());}@Testvoid findByCondition() {System.out.println("根据条件配置来查询数据...");User user = new User();user.setAge(32);Example<User> example = Example.of(user);List<User> tempUser =userRepository.findAll(example);System.out.println(tempUser.size());}@Testvoid findByConditions() {System.out.println("根据条件模糊查询数据...");ExampleMatcher exampleMatcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING).withIgnoreCase(true);User userExample = new User();userExample.setName("99");userExample.setAge(32);userExample.setGender("1");Example example = Example.of(userExample,exampleMatcher);List<User> resultList =userRepository.findAll(example);System.out.println(resultList.size());}@Testvoid findByPages() {System.out.println("分页查询数据...");for (int i = 0; i < 10; i++) {Pageable pageable =PageRequest.of(i, 10);User userExample = new User();userExample.setAge(32);Example example = Example.of(userExample);Page<User> pages =userRepository.findAll(example, pageable);System.out.println(pages.getContent());System.out.println(pages.getContent().size());System.out.println(pages.getNumber());System.out.println(pages.getSize());System.out.println("------------------------");}}}

三、方式二:使用MongoTemplate 来操作数据库

全部代码如下:

package com.hjxmongodb.mongdb;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.UUID;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;import com.hjxmongodb.mongdb.entity.User;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;/*** 包名称:com.hjxmongodb.mongdb* @version 创作时间:2023年11月9日上午10:09:09**/@SpringBootTest
public class MongoTemplateTest {@Autowiredprivate MongoTemplate mongoTemplate;static final String collectionName = "user";@Testvoid collectionExists() {System.out.println("创建集合,即数据库");// 判断是否已经存在该集合名称boolean collectionNameExists = mongoTemplate.collectionExists(collectionName);if (!collectionNameExists) {MongoCollection<org.bson.Document> document = mongoTemplate.createCollection(collectionName);System.out.println(document.toString());} else {System.out.println(collectionName + " is exists.");}}@Testvoid create() {System.out.println("批量增加数据...");Random random = new Random();Collection<User> userList = new ArrayList<User>();for (int i = 0; i < 100000; i++) {User user = new User();user.setId(UUID.randomUUID().toString().replace("-", ""));user.setAge(random.nextInt(22, 50));user.setGender(random.nextInt(0, 2) + "");user.setName("hjx" + random.nextInt(10000));user.setEmail("hjx" + random.nextInt(10000) + "wm@163.com");userList.add(user);}System.out.println("批量插入:" + userList.size() + "条数据。");List<User> t = (List<User>) mongoTemplate.insert(userList, collectionName);System.out.println("保存成功 : " + t.size());}@Testvoid findUser() {System.out.println("根据条件查找用户信息...");Query query = new Query();Criteria criteria = Criteria.where("age").gte(30); // 年龄等于30Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包括99Criteria andCriteria = new Criteria();andCriteria.andOperator(criteria, nameCriteria);query.addCriteria(andCriteria);query.limit(400);List<User> userList = mongoTemplate.find(query, User.class, collectionName);System.out.println(userList.size());userList.forEach(item -> System.out.println(item));}@Testvoid findAll() {System.out.println("分页按条件查询数据....");Query query = new Query();Criteria criteria = Criteria.where("age").gte(30); // 年龄大于等于30Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包含有99Criteria andCriteria = new Criteria();andCriteria.andOperator(criteria, nameCriteria);query.addCriteria(andCriteria);for (int i = 0; i < 10; i++) {Pageable pageable = PageRequest.of(i, 10);//每页查询10条数据query.with(pageable);List<User> pages = mongoTemplate.find(query, User.class, collectionName);System.out.println(pages.size());System.out.println(pages);System.out.println("------------------------");}}@Testvoid findallUser() {System.out.println("查询所有数据,循环输出....");List<User> user = mongoTemplate.findAll(User.class, collectionName);// 第一种循环打印数据的方式:user.forEach(item -> System.out.println(item));// 第二种循环打印数据的方式:user.forEach(System.out::println);}@Testvoid update() {System.out.println("更新用户信息...");Criteria updateCriteria = Criteria.where("age").is(22);Update updateItem = new Update();updateItem.set("age", 32);UpdateResult result = mongoTemplate.updateMulti(new Query(updateCriteria), updateItem, User.class,collectionName);System.out.println(result.toString());}@Testvoid delete() {System.out.println("删除用户信息...");Criteria updateCriteria = Criteria.where("age").is(35);DeleteResult result = mongoTemplate.remove(new Query(updateCriteria), User.class, collectionName);System.out.println(result);}//	@Testvoid deleteAll() {System.out.println("删除所有用户信息...");//方式1:删除所有数据
//		DeleteResult result = mongoTemplate.remove(new Query(), collectionName);
//		System.out.println(result);//方式2:删除所有数据,删除集合就可以了。mongoTemplate.dropCollection(collectionName);}}


总结

以上就是在SpringBoot项目中集成MongoDB后的一些基本操作。本文简单介绍了MongoDB增加、查询、分页查询、删除数据等的操作,希望对伙伴们有一点点帮助。

相关文章:

Springboot 集成 MongoDB

在SpringBoot项目中集成MongoDB后的一些基本操作。 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本文介绍的内容是Springboot如何集成MongoDB&#xff0c;以及对MongoDB进行基本的增加、查询数据的操作。 提示&#xff1a;以下是本篇…...

AM@定积分的定义求某些类型的极限

文章目录 定积分定义求极限步骤例 定积分表示为极限 定积分定义求极限 容易从定积分的定义: ∫ a b f ( x ) d x \int_{a}^{b}f(x)\mathrm{d}x ∫ab​f(x)dx lim ⁡ λ → 0 ∑ i 1 n f ( ξ i ) Δ x i \lim\limits_{\lambda\to{0}}\sum_{i1}^{n}f{(\xi_{i})}\Delta{x_i} λ→…...

Perl爬虫程序的框架

Perl爬虫程序的框架&#xff0c;这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …...

15. 机器学习——聚类

机器学习面试题汇总与解析——聚类 本章讲解知识点 什么是聚类K-means 聚类算法均值偏移聚类算法DBSCAN 聚类算法高斯混合模型(GMM)的期望最大化(EM)聚类层次聚类算法本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像…...

华为笔记本电脑原装win10/win11系统恢复安装教程方法

华为电脑matebook 14原装Win11系统带F10智能还原 安装恢复教程&#xff1a; 1.安装方法有两种&#xff0c;一种是用PE安装&#xff0c;一种是华为工厂包安装&#xff08;安装完成自带F10智能还原&#xff09; 若没有原装系统文件&#xff0c;请在这里获取&#xff1a;https:…...

计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

Python数据容器(序列操作)

序列 1.什么是序列 序列是指&#xff1a;内容连续、有序。可以使用下标索引的一类数据容器 列表、元组、字符串。均可以视为序列 2.序列的常用操作 - 切片 语法&#xff1a;序列[起始下标:结束下标:步长]起始下标表示从何处开始&#xff0c;可以留空&#xff0c;留空视作从…...

【C++】stack,queue和deque

stack的介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并提供一组特定 的成…...

Linux centos系统中添加磁盘

为了学习与训练文件系统或磁盘的分区、格式化和挂载/卸载&#xff0c;我们需要为虚拟机添加磁盘。根据需要&#xff0c;可以添加多块不同大小的磁盘。具体操作讨论如下&#xff0c;供参考。 一、添加 1.开机前 有两个地方&#xff0c;可选择打开添加硬盘对话框 (1)双击左侧…...

java网络编程之UDP协议

文章目录 UDP简介一发一收客户端&#xff1a;服务端&#xff1a; 多发多收实现多开客户端&#xff1a;服务端 UDP简介 UDP&#xff08;User Datagram Protocol&#xff09; DatagramSocket 用于创建客户端、服务端DatagramSocket() :创建客户端的Socket对象&#xff0c;系统随…...

几百封钓鱼邮件如何分析?一个简单的方法告诉你!

前几天的时候收到一批钓鱼邮件需要分析&#xff0c;打开一看就傻了眼&#xff0c;大概有几百封&#xff0c;而且基本上每一封都是钓鱼邮件&#xff0c;第一反应是很崩溃&#xff0c;这么多如何分析&#xff1f;但是客户那边又着急要&#xff0c;那只能先上了&#xff1a; 一、…...

【设计原则篇】聊聊开闭原则

开闭原则 其实就是对修改关闭&#xff0c;对拓展开放。 是什么 OCP&#xff08;Open/Closed Principle&#xff09;- 开闭原则。关于开发封闭原则&#xff0c;其核心的思想是&#xff1a;模块是可扩展的&#xff0c;而不可修改的。也就是说&#xff0c;对扩展是开放的&#xf…...

LVS面试题

LVS 原理 LVS通过工作于内核的ipvs模块来实现功能&#xff0c;其主要工作于netfilter 的INPUT链上。 而用户需要对ipvs进行操作配置则需要使用ipvsadm这个工具。 ipvsadm主要用于设置lvs模型、调度方式以及指定后端主机。 简述 LVS 三种工作模式,他们的区别 基于 NAT 的 LVS…...

uniapp发行web页面在老版本浏览器打开一片空白

uniapp发行的web页面&#xff08;菜单->发行->网站-PC Web或手机H5&#xff09;&#xff0c;对于一些老的浏览器&#xff08;或内核&#xff09;&#xff0c;打开一片空白&#xff1b; 而在新版本的浏览器中打开却正常。这是因为那些版本较低的浏览器不支持ES6的语法和新…...

数据结构—二叉树的模拟实现(c语言)

目录 一.前言 二.模拟实现链式结构的二叉树 2.1二叉树的底层结构 2.2通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 2.3二叉树的销毁 2.4二叉树查找值为x的节点 2.5二叉树节点个数 2.6二叉树叶子节点个数 2.7二叉树第k层节点个数 三.二叉树的遍历 3.1…...

COCO数据集下载

文章目录 COCO官网貌似全部失效百度网盘提取码一直是1152 COCO官网 官网下载 train2017.zip annotations_trainval2017.zip val2017.zip stuff_annotations_trainval2017.zip test2017.zip image_info_test2017.zip 貌似全部失效 百度网盘提取码一直是1152 stuff_annotatio…...

基于安卓android微信小程序的校园互助平台

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…...

Spring整合Junit(4、5)

在之前的测试方法中&#xff0c;几乎都能看到以下的两行代码: ApplicationContext context new classPathXmlApplicationContext("xxx.xm"); XXXX XXX context.getBean(Xxxx.cTass); 这两行代码的作用是创建Spring容器&#xff0c;最终获取到对象&#xff0c;但是每…...

Linux 程序开发流程 / 基本开发工具 / Vim / GCC工具链 / Make 工具 / Makefile 模板

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料&#xff08;如 百问网的《嵌入式Linux应用开发完全手册》&#xff0c;在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO&#xff1a;开发板资料》或《2.2 全系列Linux教程&#xf…...

2023.11.13【读书笔记】丨生物信息学与功能基因组学(第六章 多重序列比对 下)

目录 6.4 多重序列比对数据库6.5 基因组区域的多重序列比对6.6 展望6.7 常见问题总结 6.4 多重序列比对数据库 Pfam&#xff1a;基于谱隐马尔可夫模型构建的蛋白质家族数据库 SMART&#xff1a;简易分子构型研究工具&#xff0c;与细胞信号传导、细胞外结构域以及染色质功能…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...