当前位置: 首页 > article >正文

【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");

            // 创建Collection
            mongoDatabase.createCollection("test");
            System.out.println("create collection");

            // 获取collection
            MongoCollection<Document> collection = mongoDatabase.getCollection("test");

            // 插入document
            Document doc = new Document("name", "MongoDB")
                    .append("type", "database")
                    .append("count", 1)
                    .append("info", new Document("x", 203).append("y", 102));
            collection.insertOne(doc);

            // 统计count
            System.out.println(collection.countDocuments());

            // query - first
            Document myDoc = collection.find().first();
            System.out.println(myDoc.toJson());

            // query - loop all
            MongoCursor<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 和 Setter
    public 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;

    @Autowired
    public 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;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    // 创建用户
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    // 根据用户名查询用户
    @GetMapping("/{name}")
    public User getUserByName(@PathVariable String name) {
        return userService.findByName(name);
    }

    // 获取所有用户
    @GetMapping
    public 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.kler.cn/a/383159.html

相关文章:

  • 【读书笔记】《论语别裁》爱与罪
  • 微调大模型时,如何进行数据预处理? 将<input, output>转换为模型所需的<input_ids, labels, attention_mask>
  • 网络安全攻防演练中的常见计策
  • 我的 2024 年终总结
  • YOLO模型格式转换:pt -> onnx -> rknn
  • WebDavClient 安装和配置指南
  • 免费送源码:Java+springboot+MySQL springboot 线上线下一体化的宠物交易 计算机毕业设计原创定制
  • 大语言模型在交通领域的应用分析
  • mysql知识点
  • 如何搭建在线视频流媒体服务云直播
  • 【uni-app】*.vue 与 *.uvue
  • openssl生成加密,公钥实现非对称加密
  • 鸟害防治新选择:特力康|固定式智能激光驱鸟器的优势与挑战
  • 企业如何做好进销存管理?工厂进销存实现步骤
  • 小物体检测模型
  • 全网最全软件测试面试宝典,快看!
  • 解决 Fail to pip install mlc-llm
  • scala set集合
  • ubuntu中安装mysql
  • SQL注入(1)
  • 一款根据图片内的文字,把图片分类的软件
  • 驱动芯片 GC1277:电脑散热风扇驱动的卓越之选
  • 【ARM Linux 系统稳定性分析入门及渐进 2.2 -- Crash 命令 Crash Usage】
  • 什么是Es6,有什么特点
  • Ubuntu18.04服务器非root用户在虚拟环境下的python版本设定
  • 在软件开发流程中使用AI大模型有哪些优势?