当前位置: 首页 > 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;与细胞信号传导、细胞外结构域以及染色质功能…...

弦音墨影模型部署排错大全:从“镜像启动失败”到“生成结果空洞”

弦音墨影模型部署排错大全&#xff1a;从“镜像启动失败”到“生成结果空洞” 你是不是也遇到过这种情况&#xff1f;好不容易在星图GPU平台上找到了弦音墨影这个强大的AI模型&#xff0c;满心欢喜地点击部署&#xff0c;结果却卡在了第一步——镜像拉取失败。或者&#xff0c…...

Pixel Couplet Gen 嵌入式设备部署探索:在边缘计算场景的应用

Pixel Couplet Gen 嵌入式设备部署探索&#xff1a;在边缘计算场景的应用 1. 边缘计算时代的轻量化AI需求 随着智能终端设备普及&#xff0c;越来越多的场景需要本地化AI能力。想象一下&#xff0c;春节期间走进一家智能家居体验店&#xff0c;门口的电子屏能实时为你生成个性…...

GLM-4-9B-Chat-1M镜像升级路径:从GLM-4-9B-Chat到1M版本的权重转换与验证

GLM-4-9B-Chat-1M镜像升级路径&#xff1a;从GLM-4-9B-Chat到1M版本的权重转换与验证 如果你正在使用GLM-4-9B-Chat模型&#xff0c;并且被它128K的上下文长度所吸引&#xff0c;那么现在有个好消息&#xff1a;它的“超级加强版”来了。GLM-4-9B-Chat-1M版本&#xff0c;直接…...

FUTURE POLICE模型ComfyUI可视化工作流搭建指南

FUTURE POLICE模型ComfyUI可视化工作流搭建指南 你是不是也对那些能生成未来感、赛博朋克风格图像的AI模型感到好奇&#xff1f;但一看到复杂的代码和命令行&#xff0c;就觉得头大&#xff0c;不知道从何下手。今天&#xff0c;我们就来聊聊一个特别酷的解决方案——用ComfyU…...

主流AI培训机构评测:关键指标全对比

引言 随着AI技术的飞速发展&#xff0c;AI培训市场也日益繁荣。然而&#xff0c;无论是企业还是创业者在选择AI培训机构时&#xff0c;都面临着诸多挑战。企业端存在缺乏数字化运营团队、不懂AI工具使用、短视频内容生产效率低、打造个人IP能力不足、同城获客成本高且精准度低…...

如何快速上手GSS引擎:5步实现响应式网页布局

如何快速上手GSS引擎&#xff1a;5步实现响应式网页布局 【免费下载链接】engine GSS engine 项目地址: https://gitcode.com/gh_mirrors/engi/engine GSS引擎是一款强大的样式表引擎&#xff0c;能够帮助开发者轻松创建响应式网页布局。本教程将通过5个简单步骤&#x…...

OpenClaw场景合集:Qwen3-4B在10个日常任务中的高效应用

OpenClaw场景合集&#xff1a;Qwen3-4B在10个日常任务中的高效应用 1. 为什么选择OpenClawQwen3-4B组合 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理堆积如山的邮件时&#xff0c;这个组合就成了我的效率利器。OpenClaw作为本地化智能体框架&#xff0c;配合Qwe…...

告别setData地狱!用miniprogram-computed给你的微信小程序组件加上计算属性

告别setData地狱&#xff01;用miniprogram-computed给你的微信小程序组件加上计算属性 每次在小程序里处理复杂数据联动时&#xff0c;你是不是也经历过这样的痛苦&#xff1f;表单验证状态需要根据三个输入框内容实时更新&#xff0c;购物车总价要随着商品数量和优惠券动态计…...

LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭

前言 二叉搜索树&#xff08;BST&#xff09;是算法刷题的高频必考知识点&#xff01;今天给大家带来两道最经典、最基础的 BST 题目&#xff0c;全程用最简单的递归实现&#xff0c;代码干净、思路直白&#xff0c;不用死记硬背&#xff0c;看完就能直接写&#xff01; 一道教…...

[Android] 故宫陶瓷馆 v2.2.251126

[Android] 故宫陶瓷馆 v2.2.251126 链接&#xff1a;https://pan.xunlei.com/s/VOpHzrBozQgvaUJbdCkB20SMA1?pwdu338# 故宫陶瓷馆是故宫博物院官方出品的APP&#xff0c;以“时间轴”为核心骨架、全新技术手段打造的陶瓷馆&#xff0c;为你将展品带至手中、带至眼前。...