Spring Boot与MongoDB的集成

x33g5p2x  于2022-09-16 转载在 Spring  
字(7.6k)|赞(0)|评价(0)|浏览(533)

在这篇文章中,我们将研究如何将Spring Boot与MongoDB集成。我们将看看使用Spring Boot与MongoDB合作的不同选项。

Spring Boot与MongoDB-入门

在本教程中,我们将展示**MongoDB与spring boot的整合过程。  我们知道,spring boot是一个流行的框架,它是建立在spring框架之上的。通过spring boot,我们可以用最少的配置来构建一个项目。现在我们不需要考虑配置相关的复杂性来构建和运行一个spring框架项目。Spring boot提供了许多复杂的配置,无需花费大量的开发时间。我们知道MongoDB作为无SQL数据库也越来越受欢迎。

1. MongoDB设置*

在我们将Spring Boot与MongoDB集成之前,让我们确保已经在开发环境中安装并配置了MongoDB。遵循官方指南中的installation instructions

我们可以按照以下链接的说明来设置MongoDB。你应该按照你的操作系统的说明进行设置。安装完成后,启动MongoDB服务。由于我使用的是mac操作系统,我将执行**brew services start ****[email protected]*****。 ***我们将在这篇文章中讨论一些基本的操作,如插入、更新、删除等事项。让我们来看看MongoDB的一些基本查询。 

  1. 为了创建一个数据库,我们将执行命令**use test_db**。 
  2. 通过执行命令**show dbs**访问test_db
  3. 通过执行命令**db.test_db.insert({"employeeModel":{ “id”: 3,”name”:”Ayoosh” }})**向test_db插入一些集合。
  4. 要显示插入的数据,执行命令**db.test_db.find()**。

2. 设置应用程序

在我们开始之前,让我们用spring web starter和Spring Data MongoDB**as依赖项创建一个简单的Spring Boot应用程序。我们可以使用我们的IDE来生成应用程序,或者如果你愿意,你可以使用Spring初始化器来引导你的应用程序。

点击 "生成按钮",将项目结构下载到你的本地机器。我们要在项目中添加以下依赖项。

  • Web模块-用于Web应用程序的设置。
  • Spring Data MongoDB-支持MongoDB自动配置和集成。

这就是我们的pom.xml的样子。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.13.RELEASE</version>
      <relativePath />
      <!-- lookup parent from repository -->
   </parent>
   <groupId>com.javadevjournal</groupId>
   <artifactId>boot-mongo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>boot-mongo</name>
   <description>Demo project for Spring Boot with MongoDB</description>
   <properties>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-mongodb</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

如果你使用Gradle作为构建工具,build.gradle文件应该包含以下代码。

plugins {
  id 'org.springframework.boot' version '2.1.13.RELEASE'
  id 'io.spring.dependency-management' version '1.0.9.RELEASE'
  id 'java'
}
group = 'com.javadevjournal'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
  mavenCentral()
}
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
  implementation 'org.springframework.boot:spring-boot-starter-web'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

3. 应用概述

在上面的讨论中,我们已经用MongoDB配置了spring boot。Spring boot提供了两种方法来通过应用程序访问MongoDB。一种是*MongoTemplate,另一种是MongoRepository。 ***我们将提供两种方式的例子。

为了更好地理解,我们将开发一个应用程序来存储和检索MongoDB数据库中的雇员信息。我们将定义一个Employee模型,其中包含id、name、address字段。Spring Data通过***Spring Data MongoDB***提供了这种访问MongoDB数据库的设施。

4.  数据库配置

为了将我们的**Spring Boot应用程序与MongoDB连接,让我们在application.properties文件中定义数据库配置。Spring Boot自动配置将自动使用这些属性,一旦它启动带MongoDB的自动配置。添加以下属性(根据您的配置进行更改)

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

5.  雇员有效期

为了从MongoDB中存储和检索数据,让我们在系统中创建一个代表底层表的实体类。  这就是我们的雇员类的模样。

package com.mongo.springbootmongodb;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;

@Document
public class EmployeeModel {
    @Id
    private long id;
    private String name;
    private String address;
    private Date creationDate = new Date();

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Date getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }
}

6.  雇员存储库

现在我们将配置spring mongo存储库的接口来支持这个雇员模型。我们可以看到,EmployeeRepository***继承了***MongoRepository,它是spring data mongo repository的一部分。

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends MongoRepository < EmployeeModel, Long > {
    
}

7.  REST控制器

Spring Boot将自动处理集成的其他部分。让我们创建一个REST控制器来检查完整的工作流程 我们将看到GET、POST HTTP方法的例子。

package com.mongo.springbootmongodb;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping(value = "/template")
public class EmployeeEndpointUsingTemplate {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    private final MongoTemplate mongoTemplate;

    public EmployeeEndpointUsingTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @RequestMapping(value = "", method = RequestMethod.GET)
    public List < EmployeeModel > getAllUsers() {
        logger.info("Getting all Employees.");
        return mongoTemplate.findAll(EmployeeModel.class);
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public EmployeeModel getEmployee(@PathVariable long id) {
        logger.info("Getting Employee with ID: {}.", id);
        EmployeeModel employeeModel = mongoTemplate.findById(id, EmployeeModel.class);
        return employeeModel;
    }

    @RequestMapping(value = "/create", method = RequestMethod.POST)
    public EmployeeModel add(@RequestBody EmployeeModel employeeModel) {
        logger.info("Saving Employee.");
        return mongoTemplate.save(employeeModel);
    }
}

发送一个按钮点击后,它将创建一个条目到数据库中。然后我们应该调用GET方法来验证该条目是否被创建,就像下面的图片一样。

点击发送按钮后,它将返回一个条目,如上图所示。所以,条目被创建了,同样的方法我们可以测试DELETE方法。 

8. 使用MongoTemplate

我们将用MongoTemplate实现另一种访问数据库的方式。要使用MongoTemplate,请自动将MongoTemplate到控制器中。 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping(value = "/template")
public class EmployeeEndpointUsingTemplate {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    private final MongoTemplate mongoTemplate;

    public EmployeeEndpointUsingTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @RequestMapping(value = "", method = RequestMethod.GET)
    public List < EmployeeModel > getAllUsers() {
        logger.info("Getting all Employees.");
        return mongoTemplate.findAll(EmployeeModel.class);
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public EmployeeModel getEmployee(@PathVariable long id) {
        logger.info("Getting Employee with ID: {}.", id);
        EmployeeModel employeeModel = mongoTemplate.findById(id, EmployeeModel.class);
        return employeeModel;
    }

    @RequestMapping(value = "/create", method = RequestMethod.POST)
    public EmployeeModel add(@RequestBody EmployeeModel employeeModel) {
        logger.info("Saving Employee.");
        return mongoTemplate.save(employeeModel);
    }
}

用postman测试这个实现,就像我们对前一个实现所做的那样。我们需要在url中加入/template路径。我们将得到与上述postman请求样本相同的结果。

总结

在这篇文章中,我们研究了将***Spring Boot与MongoDB***的集成。我们研究了使用MongoTemplate和MongoRepository的选项,以使用Spring Boot为我们的应用程序访问数据。  该应用程序的源代码可在GitHub上找到。

相关文章