Spring Boot 集成 MongoDB 和 MySQL

在现代应用开发中,我们常常需要同时使用关系型数据库和非关系型数据库来存储和管理数据。Spring Boot 的强大之处在于它简化了与多种数据源的集成。在这篇文章中,我们将探讨如何在 Spring Boot 应用中集成 MongoDB 和 MySQL,并给出相应的代码示例。

1. 环境准备

首先,确保您已经安装了 JDK 以及 Maven,并创建一个新的 Spring Boot 项目。可以使用 Spring Initializr 来快速生成项目。选择 Spring Web、Spring Data JPA 和 Spring Data MongoDB 作为依赖。

2. 配置文件

application.properties 中,配置 MySQL 和 MongoDB 的连接信息:

# MySQL配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update

# MongoDB配置
spring.data.mongodb.uri=mongodb://localhost:27017/demo

3. 实体类定义

接下来,我们需要定义两个实体类,分别映射到 MySQL 和 MongoDB。

MySQL 实体类

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // Getters and setters
}

MongoDB 实体类

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

@Document
public class Product {
    @Id
    private String id;

    private String name;

    private Double price;

    // Getters and setters
}

4. 创建 Repository

我们分别为 MySQL 和 MongoDB 创建 Repository 接口。

MySQL Repository

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

MongoDB Repository

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

public interface ProductRepository extends MongoRepository<Product, String> {
}

5. 服务层

在服务层中,我们可以实现数据的增删改查(CRUD)逻辑。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ProductRepository productRepository;

    // 用户相关方法
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

    // 产品相关方法
    public List<Product> findAllProducts() {
        return productRepository.findAll();
    }
}

6. 控制层

最后,我们可以创建一个简单的控制器来暴露 API 接口。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class AppController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.findAllUsers();
    }

    @GetMapping("/products")
    public List<Product> getAllProducts() {
        return userService.findAllProducts();
    }
}

7. 数据库关系图

以下是 MySQL 和 MongoDB 数据库的 ER 图示例:

erDiagram
    USER {
        Long id PK
        String name
        String email
    }

    PRODUCT {
        String id PK
        String name
        Double price
    }

    USER ||--o{ PRODUCT : owns

8. 旅行图

在使用这些数据库时,您可能会经历以下旅程:

journey
    title User journey in a Spring Boot application
    section Fetching users from MySQL
      User requests user data: 5: User
      Application fetches data from MySQL: 4: Spring Boot Service
      Application returns user data: 5: User      
    section Fetching products from MongoDB
      User requests product data: 5: User
      Application fetches data from MongoDB: 4: Spring Boot Service
      Application returns product data: 5: User

结语

通过以上步骤,您可以轻松地在 Spring Boot 应用中集成 MongoDB 和 MySQL。这种设计模式允许您充分利用这两种数据库的优势,既能有效存储结构化数据,又能方便地处理非结构化数据。希望这篇文章能够帮助您更好地理解 Spring Boot 与多种数据库的集成方法,为您的开发带来便利。