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

devtools/2024/11/8 17:15:36/

在这里插入图片描述

文章目录

    • 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>

调用代码

java">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 中的集合。

java">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() 等。

java">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 层进行数据操作。

java">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,以便客户端能够与系统交互。

java">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 应用:

java">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.ppmy.cn/devtools/132359.html

相关文章

无人机干扰与抗干扰,无人机与反制设备的矛与盾

无人机干扰与抗干扰&#xff0c;以及无人机与反制设备之间的关系&#xff0c;可以形象地比喻为矛与盾的较量。以下是对这两方面的详细探讨&#xff1a; 一、无人机干扰与抗干扰 1. 无人机干扰技术 无人机干扰技术是指通过各种手段对无人机系统进行干扰&#xff0c;使其失去正…

基于卷积神经网络的农作物病虫害识别系统(pytorch框架,python源码)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示&#xff1a; 基于卷积神经网络的农作物病虫害检测&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的农作物病虫害识别系统是在pytorch框架下实现的…

mybatis源码解析-sql执行流程

1 执行器的创建 1. SimpleExecutor 描述&#xff1a;最基本的执行器&#xff0c;每次查询都会创建新的语句对象&#xff0c;并且不会缓存任何结果。 特点&#xff1a; 每次查询都会创建新的 PreparedStatement 对象。 不支持一级缓存。 适用于简单的查询操作&#xff0c;不…

Python | Leetcode Python题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; class Solution:def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m, n len(matrix), len(matrix[0])# 初始化动态规划的数组&#xff0c;所有的距离值都设置为一个很大的数dist [[10**9] * n for _ in range(m)]…

Qt低版本多网卡组播bug

原文地址 最近在某个项目中&#xff0c;发现了一个低版本Qt的bug&#xff0c;导致组播无法正常使用&#xff0c;经过一番排查&#xff0c;终于找到了原因&#xff0c;特此记录。 环境 Qt&#xff1a;5.7.0 mingw32操作系统&#xff1a;windows 11 现象 在Qt5.7.0版本中&…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据&#xff0c;从而使CPU去完成更重要的任务&#xff0c;不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

微积分复习笔记 Calculus Volume 1 - 4.8 L’Hôpital’s Rule

4.8 L’Hpital’s Rule - Calculus Volume 1 | OpenStax

ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic

设计题目&#xff1a;海鲜自助餐厅系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所…