自学内容网 自学内容网

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

在这里插入图片描述


更多相关内容可查看

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的底层原理,毕竟面试要造火箭


原文地址:https://blog.csdn.net/Aaaaaaatwl/article/details/143574748

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!