Spring Boot使用MongoDB详解

点击下载《Spring Boot使用MongoDB详解》

1. 前言

本文将详细介绍如何在Spring Boot项目中集成MongoDB数据库,包括其原理、使用流程、步骤以及完整的代码示例。通过本文,读者将能够了解Spring Boot与MongoDB的集成方式,掌握在Spring Boot应用程序中操作MongoDB数据库的基本方法。

2. Mongodb介绍

随着大数据时代的到来,NoSQL数据库因其灵活的数据模型和高性能的特点逐渐受到开发者的青睐。MongoDB作为NoSQL数据库中的一种,以其面向文档的存储方式、高效的查询性能以及丰富的查询语言而著称。Spring Boot作为一个快速构建应用的框架,提供了对MongoDB的良好支持。

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富、最像关系数据库的。MongoDB的数据结构非常松散,采用类似JSON的BSON格式,因此可以存储比较复杂的数据类型。

MongoDB的主要特点包括

  1. 面向集合存储,易存储对象类型的数据,且模式自由,支持动态查询。
  2. 支持完全索引,包含内部对象,查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,并且支持对数据建立索引。
  3. 支持复制和故障恢复,使用高效的二进制数据存储,包括大型对象(如视频等)。
  4. 自动处理碎片,以支持云计算层次的扩展性,文件存储格式为BSON(一种JSON的扩展)。
  5. 可以通过网络访问,支持高负载情况下的扩展,可在多个节点之间分配数据以提高处理能力。

因此,MongoDB具有高性能、易部署、易使用、存储数据方便等特点,适用于各种需要存储和查询复杂数据类型的场景。

3. Spring Boot使用MongoDB

Spring Boot通过Spring Data MongoDB模块实现对MongoDB的集成。Spring Data是一个用于简化数据库访问的框架,它提供了统一的接口和抽象,使得开发者无需关心具体的数据库实现细节。在Spring Boot项目中,通过添加相关依赖和配置,即可轻松实现对MongoDB的访问。

3.1 添加依赖

在Spring Boot项目的pom.xml文件中添加Spring Data MongoDB的依赖:

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

3.2 配置MongoDB连接

application.properties文件中配置MongoDB的连接信息:

spring.data.mongodb.uri=mongodb://<username>:<password>@<host>:<port>/<database>

或在application.yml文件配置MongoDB的连接信息:

spring:#mongodb数据源data:mongodb:host: 192.168.1.111 # mongodb的连接地址port: 7019 # mongodb的连接端口号database: test # mongodb的连接的数据库username: testpassword: "test"

3.3 创建实体类

根据MongoDB中的文档结构,创建对应的Java实体类,并使用@Document注解标注:

@Document(collection = "users")  
public class User {  @Id  private String id;  private String name;  private int age;  // getter和setter方法  
}

3.4 操作MongoDB(方法1)

1. 创建Repository接口

创建一个继承自MongoRepository的接口,用于操作MongoDB中的数据:

public interface UserRepository extends MongoRepository<User, String> {  
}

2. 实现CRUD操作

在Service或Controller中注入UserRepository,然后调用其提供的方法进行CRUD操作:

@Service  
public class UserService {  @Autowired  private UserRepository userRepository;  public List<User> getAllUsers() {  return userRepository.findAll();  }  public User getUserById(String id) {  return userRepository.findById(id).orElse(null);  }  public User saveUser(User user) {  return userRepository.save(user);  }  public void deleteUser(String id) {  userRepository.deleteById(id);  }  
}

3.5 操作MongoDB(方法2)

在配置类中创建MongoTemplate的Bean。

import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.data.mongodb.core.MongoTemplate;  
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;  
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;  
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;  @Configuration  
public class MongoConfig {  @Bean  public MongoTemplate mongoTemplate(MongoDbFactory dbFactory, MongoMappingContext mongoMappingContext) {  MappingMongoConverter converter = new MappingMongoConverter(dbFactory, mongoMappingContext);  converter.setTypeMapper(new DefaultMongoTypeMapper(null));  MongoTemplate mongoTemplate = new MongoTemplate(dbFactory, converter);  return mongoTemplate;  }  
}

1. 增加数据(Insert)

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.data.mongodb.core.MongoTemplate;  
import org.springframework.stereotype.Service;  @Service  
public class UserService {  @Autowired  private MongoTemplate mongoTemplate;  public User insertUser(User user) {  return mongoTemplate.insert(user);  }  
}

2. 查询数据(Find)

public User findUserById(String id) {  return mongoTemplate.findById(id, User.class);  
}  public List<User> findAllUsers() {  return mongoTemplate.findAll(User.class);  
}  public User findUserByName(String name) {  Query query = new Query(Criteria.where("name").is(name));  return mongoTemplate.findOne(query, User.class);  
}

3. 更新数据(Update)

public User updateUser(String id, User updatedUser) {  Query query = new Query(Criteria.where("_id").is(id));  Update update = new Update().set("name", updatedUser.getName()).set("age", updatedUser.getAge());  return mongoTemplate.findAndModify(query, update, User.class);  
}

4. 删除数据(Delete)

public void deleteUserById(String id) {  mongoTemplate.remove(new Query(Criteria.where("_id").is(id)), User.class);  
}  public void deleteAllUsers() {  mongoTemplate.removeAll(User.class);  
}

4. 总结

本文详细介绍了Spring Boot与MongoDB的集成过程,包括添加依赖、配置连接、创建实体类和Repository接口以及实现CRUD操作。通过本文的指导,读者应该能够轻松地在Spring Boot项目中集成MongoDB,并实现基本的数据库操作。在实际开发中,还可以根据具体需求进一步扩展和优化MongoDB的使用方式。

点击下载《Spring Boot使用MongoDB详解》

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

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

相关文章

matlab滤波器设计

1、内容简介 略 51-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab滤波器设计-butter、ellip、cheby1、cheby2_哔哩哔哩_bilibili 4、参考论文 略

光量子计算公司ORCA将在英国国家量子计算中心部署量子计算测试平台

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨沛贤 深度好文&#xff1a;800字丨7分钟阅读 全栈光量子计算系统公司ORCA Computing 将为英国国家量子计算中心&#xff08;NQCC&#xff09;搭建量子计算测试平台并提…

cad技巧

cad技巧 直线&#xff0c;斜线 移动&#xff0c;偏移&#xff0c;复制 圆&#xff0c;椭圆&#xff0c;圆弧 打断&#xff0c;延伸 线型比例&#xff0c;圆角&#xff0c;分解&#xff0c;文字编辑 矩形&#xff0c;合并&#xff0c;多段线&#xff0c;样条曲线 倒角&#xff…

上海AI Lab联合上交推出复杂图表推理多模态评测基准ChartX与基座模型ChartVLM

近期&#xff0c;众多多模态大语言模型&#xff08;MLLM&#xff09;相继问世。然而&#xff0c;这些模型对于视觉图表中所包含的信息的感知能力以及推理能力尚未得到充分的挖掘与探索。本研究中&#xff0c;为了对现有的 MLLM 在图表领域的性能进行全方位、严格的评估&#xf…

电机Id Iq区别

电机Id Iq区别 交流电机的id和iq是什么 交流电机的id和iq是什么 &#xff08;初学者必须掌握的交流电机基础知识&#xff09; 交流电机是现代工业中广泛使用的一种电动机&#xff0c;它具有高效、可靠、节能等优点。但是&#xff0c;对于初学者来说&#xff0c;掌握交流电机的…

pytorch简单新型模型测试参数

import torch from torch.nn import Conv2d,MaxPool2d,Sequential,Flatten,Linear import torchvision import torch.optim.optimizer from torch.utils.data import DataLoader,dataset from torch import nn import torch.optim.optimizer# 建模 model nn.Linear(2,1)#损失 …

【leetcode每日一题】【滑动窗口长度固定】案例

567. 字符串的排列 长度不变 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 ****的排列。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 换句话说&#xff0c;s1 的排列之一是 s2 的 子串 思路&#xff1a;s1长度固定的窗…

Vue项目创建——每一步都有记录和说明

文章目录 1. 首先下载Node2. 全局安装vue/cli3. 创建Vue项目4. 启动Vue项目 1. 首先下载Node 既然都开始创建Vue项目了&#xff0c;想必大家电脑里面都有Node跟npm了&#xff0c;这里就不赘述了。 2. 全局安装vue/cli vue/cli是什么 vue/cli 是一个全局安装的 npm 包&#x…

网络质量分析,DNS解析慢、网页经常打开失败、慢等

抓包统计分析DNS&#xff1a;解析用时、解析结果、解析状态 如图 #_*_ coding:utf8 _*_ ## 网络质量分析&#xff0c;DNS解析慢、网页经常打开失败、慢等 ## 抓包分析DNS&#xff1a;解析用时、解析结果、解析状态 # 2024-02-22 # Linux tcpdump 抓包示例&#xff1a;tcpdump …

Netron可视化工具、Pytorch中文文档等在线工具

一、Netron可视化工具 二、Caffe、ONNX、TensorFlow到NCNN等的转换工具 三、Pytorch中文文档

AIGC学习笔记——DALL-E2详解+测试

它主要包括三个部分&#xff1a;CLIP&#xff0c;先验模块prior和img decoder。其中CLIP又包含text encoder和img encoder。&#xff08;在看DALLE2之前强烈建议先搞懂CLIP模型的训练和运作机制,之前发过CLIP博客&#xff09; 论文地址&#xff1a;https://cdn.openai.com/pap…

SpringMVC作用域传递数据

javaEE一共有四个作用域&#xff1a;分别是&#xff1a; application&#xff08;ServletContext &#xff09;、session、request、page&#xff1b; jsp中&#xff1a; ${requestScope.message} ${sessionScope.message} ${applicationScope.message} application a…

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考&#xff1a;10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验&#xff0c;也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…

MCU独立按键单控LED实现

##江科大视频学习&#xff0c;并且对具体的一些小细节进行更详细的分析。 什么是独立按键&#xff1f; 轻触按键:相当于是一种电子开关&#xff0c;按下开头接通&#xff0c;松开时开头断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意…

亿道丨三防平板也有国产,六大特点你知道多少?

国产三防平板是指由国内厂商自主研发和生产的具有防水、防尘和防摔等特性的平板电脑产品。与一般的平板电脑相比&#xff0c;国产三防平板有以下特点&#xff1a; 防护性能更好&#xff1a;国产三防平板采用的材料、密封性能以及相关的防护设计都经过严格测试和认证&#xff0c…

经典枚举算法

解析&#xff1a; 首先答案肯定是字符串的某个前缀&#xff0c;然后简单直观的想法就是枚举所有的前缀来判断&#xff0c;我们设这个前缀串长度为 lenx &#xff0c;str1 的长度为 len1&#xff0c;str2 的长度为 len2&#xff0c;则我们知道前缀串的长度必然要是两个字符串长…

AI语音系统电销机器人系统搭建,电话机器人源码是干嘛的?

电话机器人是干嘛的&#xff1f;电话机器人有用吗&#xff1f;自从电话机器人的出现&#xff0c;大家对电话销售有了新的认识。是什么黑科技竟然如此厉害&#xff0c;在没有员工操作的情况下&#xff0c;能够快速地筛选意向客户。与此同时&#xff0c;还能将客户的信息整理好。…

SpringBoot源码解读与原理分析(三十二)SpringBoot整合JDBC(一)JDBC组件的自动装配

文章目录 前言第10章 SpringBoot整合JDBC10.1 SpringBoot整合JDBC的项目搭建10.1.1 初始化数据库10.1.2 整合项目10.1.2.1 导入JDBC和MySQL驱动依赖10.1.2.2 配置数据源 10.1.3 编写业务代码10.1.3.1 编写与t_user表对应的实体类User10.1.3.2 编写Dao层代码10.1.3.3 编写Servic…

golang实现一个BasicAuth的HTTP server

之前写的《golang实现一个简单的HTTP server》没有包含认证部分 本例给出了支持BasicAuth的实现&#xff0c;以及如何在一个项目中导入自己定义的package 编写代码 创建项目所在文件夹 adminhpc-1:~/go$ mkdir auth_http adminhpc-1:~/go$ cd auth_http adminhpc-1:~/go/auth…

Oracle内存计算应用模式

前言 内存计算是利用内存来加速数据访问和应用的性能&#xff0c;并降低应用开发复杂度的技术。近十年来&#xff0c;随着软硬件技术的发展和用户需求的成熟&#xff0c;内存计算技术已经得到了广泛地应用。 Oracle在内存计算领域具有非常重要的地位&#xff0c;这主要得益于…