【MongoDB】MongoDB的Java API及Spring集成(Spring Data)

在这里插入图片描述

文章目录

    • Java API
    • Spring 集成
      • 1. 添加依赖
      • 2. 配置 MongoDB
      • 3. 创建实体类
      • 4. 创建 Repository 接口
      • 5. 创建 Service 类
      • 6. 创建 Controller 类
      • 7. 启动 Spring Boot 应用
      • 8. 测试你的 API

更多相关内容可查看

Java API

maven

<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.12.6</version>
</dependency>

调用代码

private static final String MONGO_HOST = "xxx.xxx.xxx.xxx";private static final Integer MONGO_PORT = 27017;private static final String MONGO_DB = "testdb";public static void main(String args[]) {try {// 连接到 mongodb 服务MongoClient mongoClient = new MongoClient(MONGO_HOST, MONGO_PORT);// 连接到数据库MongoDatabase mongoDatabase = mongoClient.getDatabase(MONGO_DB);System.out.println("Connect to database successfully");// 创建CollectionmongoDatabase.createCollection("test");System.out.println("create collection");// 获取collectionMongoCollection<Document> collection = mongoDatabase.getCollection("test");// 插入documentDocument doc = new Document("name", "MongoDB").append("type", "database").append("count", 1).append("info", new Document("x", 203).append("y", 102));collection.insertOne(doc);// 统计countSystem.out.println(collection.countDocuments());// query - firstDocument myDoc = collection.find().first();System.out.println(myDoc.toJson());// query - loop allMongoCursor<Document> cursor = collection.find().iterator();try {while (cursor.hasNext()) {System.out.println(cursor.next().toJson());}} finally {cursor.close();}} catch (Exception e) {System.err.println(e.getClass().getName() + ": " + e.getMessage());}}

Spring 集成

Spring runtime体系图

在这里插入图片描述
Spring Data是基于Spring runtime体系的

在这里插入图片描述

Spring Data MongoDB 是 Spring Data 项目的一部分,用于简化与 MongoDB 的交互。通过 Spring Data MongoDB,我们可以轻松地将 MongoDB 数据库的操作与 Spring 应用集成,并且能够以声明式的方式进行数据访问,而无需直接编写大量的 MongoDB 操作代码。

官方文档地址:https://docs.spring.io/spring-data/mongodb/docs/3.0.3.RELEASE/reference/html/#mongo.core

  • 引入mongodb-driver, 使用最原生的方式通过Java调用mongodb提供的Java driver;
  • 引入spring-data-mongo, 自行配置使用spring data 提供的对MongoDB的封装 使用MongoTemplate 的方式 使用MongoRespository 的方式
  • 引入spring-data-mongo-starter, 采用spring autoconfig机制自动装配,然后再使用MongoTemplate或者MongoRespository方式

具体代码如下:

以下是一个使用 Spring Data MongoDB 的基本示例,展示了如何将 MongoDB 集成到 Spring Boot 应用中,执行 CRUD 操作。

1. 添加依赖

首先,在 pom.xml 文件中添加 Spring Data MongoDB 相关的依赖:

<dependencies><!-- Spring Boot Starter Web, 用于构建 RESTful API --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data MongoDB, 用于集成 MongoDB --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- Spring Boot Starter Test, 用于测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 其他依赖 -->
</dependencies>

2. 配置 MongoDB

application.propertiesapplication.yml 文件中配置 MongoDB 数据源信息。假设你在本地运行 MongoDB,连接信息如下:

# application.properties 示例spring.data.mongodb.uri=mongodb://localhost:27017/mydb

你也可以单独指定 hostportdatabase,如下所示:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb

3. 创建实体类

定义一个实体类,并使用 @Document 注解标注它为 MongoDB 文档。Spring Data MongoDB 会将此类映射到 MongoDB 中的集合。

package com.example.mongodb.model;import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "users")  // 指定 MongoDB 中集合的名称
public class User {@Id  // 标注主键private String id;private String name;private String email;// 构造方法、Getter 和 Setterpublic User() {}public User(String name, String email) {this.name = name;this.email = email;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

4. 创建 Repository 接口

Spring Data MongoDB 提供了 MongoRepository 接口,你可以通过扩展该接口来定义自己的数据访问层。MongoRepository 提供了很多默认的方法,比如 save()findById()findAll() 等。

package com.example.mongodb.repository;import com.example.mongodb.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends MongoRepository<User, String> {// 你可以根据需要定义自定义查询方法User findByName(String name);
}

5. 创建 Service 类

Service 层将调用 Repository 层进行数据操作。

package com.example.mongodb.service;import com.example.mongodb.model.User;
import com.example.mongodb.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}// 保存一个用户public User saveUser(User user) {return userRepository.save(user);}// 根据用户名查询用户public User findByName(String name) {return userRepository.findByName(name);}// 获取所有用户public Iterable<User> findAllUsers() {return userRepository.findAll();}// 删除一个用户public void deleteUser(String userId) {userRepository.deleteById(userId);}
}

6. 创建 Controller 类

Controller 层暴露 RESTful API,以便客户端能够与系统交互。

package com.example.mongodb.controller;import com.example.mongodb.model.User;
import com.example.mongodb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/users")
public class UserController {private final UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}// 创建用户@PostMappingpublic User createUser(@RequestBody User user) {return userService.saveUser(user);}// 根据用户名查询用户@GetMapping("/{name}")public User getUserByName(@PathVariable String name) {return userService.findByName(name);}// 获取所有用户@GetMappingpublic Iterable<User> getAllUsers() {return userService.findAllUsers();}// 删除用户@DeleteMapping("/{id}")public void deleteUser(@PathVariable String id) {userService.deleteUser(id);}
}

7. 启动 Spring Boot 应用

确保你有一个运行中的 MongoDB 实例,并且配置了连接属性。

接下来,可以启动你的 Spring Boot 应用:

package com.example.mongodb;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MongoApplication {public static void main(String[] args) {SpringApplication.run(MongoApplication.class, args);}
}

8. 测试你的 API

启动应用后,你可以使用 Postman 或其他 HTTP 客户端来测试你的 API。

  • POST /users:创建用户
  • GET /users/{name}:根据用户名查询用户
  • GET /users:获取所有用户
  • DELETE /users/{id}:根据 ID 删除用户

以上一个简单的MongoDB使用就完善了,在业务中更多的也是如此的CRUD,后续文章会写一些关于MongoDB的底层原理,毕竟面试要造火箭

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

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

相关文章

【人工智能】ChatGPT多模型感知态识别

目录 ChatGPT辅助细化知识增强&#xff01;一、研究背景二、模型结构和代码任务流程一&#xff1a;启发式生成 三、数据集介绍三、性能展示实现过程运行过程训练过程 ChatGPT辅助细化知识增强&#xff01; 多模态命名实体识别&#xff08;MNER&#xff09;最近引起了广泛关注。…

【嵌入式】STM32中的SPI通信

SPI是由摩托罗拉公司开发的一种通用数据总线&#xff0c;其中由四根通信线&#xff0c;支持总线挂载多设备&#xff08;一主多从&#xff09;&#xff0c;是一种同步全双工的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文…

map.computeIfAbsent() 与 map.putIfAbsent()的异同

map.computeIfAbsent() 和 map.putIfAbsent() 都是 java.util.Map 接口提供的方法&#xff0c;用于处理键值对的插入操作。它们在功能上有相似之处&#xff0c;但也有一些重要的区别。下面详细解释这两个方法的异同&#xff1a; map.putIfAbsent(K key, V value) 功能&#xf…

Python 常用数据容器(学习笔记)

文章目录 前言1、什么是数据容器&#xff1f;2、列表 (list)2.1 列表的定义和使用2.2 列表元素的访问2.3 列表的常用操作方法2.4 列表的循环遍历 3、元组 (tuple)3.1 元组的定义和使用3.2 元组的访问3.3 元组的常用操作方法3.4元组的循环遍历 4、字符串 (str)4.1 字符串的定义与…

【汽车租聘管理与推荐】Python+Django网页界面+推荐算法+管理系统网站

一、介绍 汽车租聘管理与推荐系统。本系统使用Python作为主要编程语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建前端界面&#xff0c;后端采用Django框架处理用户的请求。创新点&#xff1a;使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#…

快速入门CSS

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗 如有错误&#xff0c;欢迎指出~ 目录 CSS css的三种引入方式 css书写规范 选择器分类 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 color颜色设置 border边框设置 width/heigth 内/外边距 C…

uniapp实现H5和微信小程序获取当前位置(腾讯地图)

之前的一个老项目&#xff0c;使用 uniapp 的 uni.getLocation 发现H5端定位不准确&#xff0c;比如余杭区会定位到临平区&#xff0c;根据官方文档初步判断是项目的uniapp的版本太低。 我选择的方式不是区更新uniapp的版本&#xff0c;是直接使用高德地图的api获取定位。 1.首…

探索Python网络请求新纪元:httpx库的崛起

文章目录 **探索Python网络请求新纪元&#xff1a;httpx库的崛起**第一部分&#xff1a;背景介绍第二部分&#xff1a;httpx库是什么&#xff1f;第三部分&#xff1a;如何安装httpx库&#xff1f;第四部分&#xff1a;简单的库函数使用方法1. 发送GET请求2. 发送POST请求3. 超…

产品的四个生命周期,产品经理需深刻理解

在产品管理的世界里&#xff0c;产品就像有生命的个体&#xff0c;经历着从诞生到消亡的过程。作为产品经理&#xff0c;深刻理解产品的四个生命周期 —— 引入期、成长期、成熟期和衰退期&#xff0c;是打造成功产品的关键。 引入期&#xff1a;破局的起点 对于 B 端产品而言&…

TensorFlow|咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f37a; 要求&#xff1a; 自己搭建VGG-16网络框架调用官方的VGG-16网络框架 &#x1f37b; 拔高&#xff08;可选&#xff09;&#xff1a; 验证集准…

《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析

导读&#xff1a;SQL 诞生于 20 世纪 70 年代&#xff0c;至今已有半个世纪。SQL 语言具有语法简单&#xff0c;低学习门槛等特点&#xff0c;诞生之后迅速普及与流行开来。由于 SQL 具有易学易用的特点&#xff0c;使得开发人员容易掌握&#xff0c;企业若能在其计算机软件中支…

需求分析管理

软件需求工程是包括创建和维护软件需求文档所必须得一切活动的过程&#xff0c;可以分为需求开发和需求管理两大工作。 需求开发过程&#xff08;四阶段&#xff09; 需求的分析(或者需求开发)过程包括&#xff0c;收集与获取需求&#xff0c;进行需求分析&#xff0c;定义需…

机器学习与深度学习-1-线性回归从零开始实现

机器学习与深度学习-1-线性回归从零开始实现 1 前言 ​ 内容来源于沐神的《动手学习深度学习》课程&#xff0c;本篇博客对线性回归从零开始实现&#xff08;即不调用封装好的库&#xff0c;如SGD优化器、MSE损失函数等&#xff09;进行重述&#xff0c;并且修改了沐神的课堂…

在 Sanic 中配置 Worker 并发数量的最佳实践

在 Sanic 中&#xff0c;您可以通过配置 worker 的数量来控制并发处理请求的能力。Sanic 是一个异步的 Python Web 框架&#xff0c;允许您创建高性能的 HTTP 服务器。您可以通过以下几个步骤来设置和管理一个 worker 的并发数量。 1. Worker 数量 在 Sanic 中&#xff0c;您…

点云从入门到精通技术详解100篇-基于结构光测量的三维人脸重建及识别(中)

目录 2.1.2 投影光栅几何标定模型建立 2.1.2.1 线性相位——高度模型 2.1.2.2 非线性相位——高度模型 2.1.2.3 三角立体模型 2.1.3 系统参数标定 2.1.3.1 摄像机模型 2.1.3.2 系统参数标定 2.2 基于结构光的三维人脸重建技术 2.2.1 人脸条纹图技术分析 2…

VMware虚拟机可以被外部机器访问吗?

如何设置让同局域网内其他机器访问本地虚拟机服务&#xff08;这里以访问我本地虚拟机ELasticSearch服务为例&#xff09; 选中虚拟机 - 虚拟机 - 设置 虚拟机网络设置&#xff1a; 选中网络适配器&#xff0c;修改网络模式为NAT模式 编辑 - 虚拟机网络编辑器 更改设置 …

【论文复现】自动化细胞核分割与特征分析

本文所涉及所有资源均在这里可获取。 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 论文复现 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 自动化细胞核分割与特征分析 引言效果展示HoverNet概述HoverNet原理分析整…

【NOIP普及组】质因数分解

【NOIP普及组】质因数分解 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 已知正整数 n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 输入 输入只有一行&#xff0c;包含一个正整数…

2024软件测试面试热点问题

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大厂面试热点问题 1、测试人员需要何时参加需求分析&#xff1f; 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工…

qt QTextStream详解

1、概述 QTextStream类是Qt框架中用于处理文本输入输出的类。它提供了一种方便的方式&#xff0c;可以从各种QIODevice&#xff08;如QFile、QBuffer、QTcpSocket等&#xff09;中读取文本数据&#xff0c;或者将文本数据写入这些设备中。QTextStream能够自动处理字符编码的转…