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是什么?二、使用步骤 1.引入库2.读入数据总结 前言 本文介绍的内容是Springboot如何集成MongoDB,以及对MongoDB进行基本的增加、查询数据的操作。 提示:以下是本篇…...
AM@定积分的定义求某些类型的极限
文章目录 定积分定义求极限步骤例 定积分表示为极限 定积分定义求极限 容易从定积分的定义: ∫ a b f ( x ) d x \int_{a}^{b}f(x)\mathrm{d}x ∫abf(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爬虫程序的框架,这个框架可以用来爬取任何网页的内容。 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智能还原 安装恢复教程: 1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里获取:https:…...

计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

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

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

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

java网络编程之UDP协议
文章目录 UDP简介一发一收客户端:服务端: 多发多收实现多开客户端:服务端 UDP简介 UDP(User Datagram Protocol) DatagramSocket 用于创建客户端、服务端DatagramSocket() :创建客户端的Socket对象,系统随…...

几百封钓鱼邮件如何分析?一个简单的方法告诉你!
前几天的时候收到一批钓鱼邮件需要分析,打开一看就傻了眼,大概有几百封,而且基本上每一封都是钓鱼邮件,第一反应是很崩溃,这么多如何分析?但是客户那边又着急要,那只能先上了: 一、…...

【设计原则篇】聊聊开闭原则
开闭原则 其实就是对修改关闭,对拓展开放。 是什么 OCP(Open/Closed Principle)- 开闭原则。关于开发封闭原则,其核心的思想是:模块是可扩展的,而不可修改的。也就是说,对扩展是开放的…...
LVS面试题
LVS 原理 LVS通过工作于内核的ipvs模块来实现功能,其主要工作于netfilter 的INPUT链上。 而用户需要对ipvs进行操作配置则需要使用ipvsadm这个工具。 ipvsadm主要用于设置lvs模型、调度方式以及指定后端主机。 简述 LVS 三种工作模式,他们的区别 基于 NAT 的 LVS…...

uniapp发行web页面在老版本浏览器打开一片空白
uniapp发行的web页面(菜单->发行->网站-PC Web或手机H5),对于一些老的浏览器(或内核),打开一片空白; 而在新版本的浏览器中打开却正常。这是因为那些版本较低的浏览器不支持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微信小程序的校园互助平台
项目介绍 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…...
Spring整合Junit(4、5)
在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context new classPathXmlApplicationContext("xxx.xm"); XXXX XXX context.getBean(Xxxx.cTass); 这两行代码的作用是创建Spring容器,最终获取到对象,但是每…...

Linux 程序开发流程 / 基本开发工具 / Vim / GCC工具链 / Make 工具 / Makefile 模板
编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程…...

2023.11.13【读书笔记】丨生物信息学与功能基因组学(第六章 多重序列比对 下)
目录 6.4 多重序列比对数据库6.5 基因组区域的多重序列比对6.6 展望6.7 常见问题总结 6.4 多重序列比对数据库 Pfam:基于谱隐马尔可夫模型构建的蛋白质家族数据库 SMART:简易分子构型研究工具,与细胞信号传导、细胞外结构域以及染色质功能…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...