讲解下SpringBoot中MySql和MongoDB的配合使用

在Spring Boot中,MySQL和MongoDB可以配合使用,以充分发挥关系型数据库和非关系型数据库的优势。MySQL适合处理结构化数据,而MongoDB适合处理非结构化或半结构化数据。以下是如何在Spring Boot中同时使用MySQL和MongoDB的详细讲解。

1. 添加依赖

首先,在pom.xml中添加MySQL和MongoDB的依赖:

xml 复制代码
<dependencies>
    <!-- Spring Boot Starter Data JPA for MySQL -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data MongoDB -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

    <!-- Other dependencies -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 配置数据源

application.propertiesapplication.yml中配置MySQL和MongoDB的连接信息。

application.properties 示例:
properties 复制代码
# MySQL 配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

# MongoDB 配置
spring.data.mongodb.uri=mongodb://localhost:27017/mydb
application.yml 示例:
yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
  data:
    mongodb:
      uri: mongodb://localhost:27017/mydb

3. 创建实体类和Repository

MySQL 实体类和Repository

创建一个MySQL实体类并使用JPA注解进行映射:

java 复制代码
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
}

创建对应的JPA Repository:

java 复制代码
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}
MongoDB 实体类和Repository

创建一个MongoDB实体类并使用MongoDB注解进行映射:

java 复制代码
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
}

创建对应的MongoDB Repository:

java 复制代码
import org.springframework.data.mongodb.repository.MongoRepository;

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

4. 使用不同的Repository进行操作

在Service或Controller中,你可以分别使用UserRepositoryProductRepository来操作MySQL和MongoDB。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ProductRepository productRepository;

    public void addUser(User user) {
        userRepository.save(user);
    }

    public void addProduct(Product product) {
        productRepository.save(product);
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public Product getProductById(String id) {
        return productRepository.findById(id).orElse(null);
    }
}

5. 事务管理

默认情况下,Spring Boot中的事务管理是基于JPA的,因此它只适用于MySQL。如果你需要在同一个事务中操作MySQL和MongoDB,可能需要使用分布式事务管理器(如JTA)或手动处理事务。

6. 总结

在Spring Boot中同时使用MySQL和MongoDB非常简单。通过配置不同的数据源,并使用对应的Repository,你可以轻松地在同一个应用中操作关系型和非关系型数据库。这种组合可以让你根据业务需求灵活选择存储方案,充分发挥两种数据库的优势。

相关推荐
韩楚风2 小时前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
ACP广源盛139246256735 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
乐观的Terry6 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
周洲08308 小时前
STM32 串口指令控制系统|上位机下发命令控制 LED、继电器,通用指令解析框架
stm32·嵌入式硬件·mongodb
霸道流氓气质12 小时前
SpringBoot中使用字典驱动的动态路由示例
java·spring boot·后端
万亿少女的梦16812 小时前
基于Spring Boot、Vue与MySQL的高校实习信息管理系统设计与实现
spring boot·mysql·vue·权限管理·restful api
宠友信息13 小时前
Spring Boot与Redis ZSet实现仿小红书源码双列瀑布流推荐
java·大数据·前端·spring boot·redis·mysql·uni-app
hdsoft_huge13 小时前
SpringBoot 系列 20:Jar 打包 + Docker 容器化 + Compose 一键部署|服务器上线 & 零停机平滑升级全教程
spring boot·docker·jar
ZENERGY-众壹14 小时前
50MW分布式VPP接入实战:调度中心要求的1分钟频率如何不卡死API
运维·服务器·分布式·光伏运维
富士康质检员张全蛋14 小时前
Kafka的操作 生产消息
分布式·kafka