Spring Boot MyBatis Plus 配置数据源详解

文章目录

    • [1. 引入 MyBatis Plus 依赖](#1. 引入 MyBatis Plus 依赖 "#1__MyBatis_Plus__21")
    • [2. 数据源配置](#2. 数据源配置 "#2__36")
    • [3. MyBatis Plus 配置](#3. MyBatis Plus 配置 "#3_MyBatis_Plus__53")
    • [4. 动态数据源配置(多数据源)](#4. 动态数据源配置(多数据源) "#4__104")
    • [5. 小结](#5. 小结 "#5__148")

🎉欢迎来到架构设计专栏~Spring Boot MyBatis Plus 配置数据源详解



Spring Boot与MyBatis Plus的结合,为Java开发者提供了一种简便而高效的持久化解决方案。其中,数据源配置是整合过程中的重要一环。本文将深入探讨如何在Spring Boot项目中配置MyBatis Plus所使用的数据源,以及一些相关的拓展和分析。

1. 引入 MyBatis Plus 依赖

首先,在pom.xml中引入MyBatis Plus的相关依赖:

xml 复制代码
<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>

这个依赖将自动导入MyBatis Plus所需的其他依赖,简化了项目的配置。

2. 数据源配置

在Spring Boot中,数据源的配置通常位于application.properties或application.yml文件中。下面是一个简单的数据源配置示例:

properties 复制代码
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 连接池配置(可选)
spring.datasource.hikari.maximum-pool-size=10

在这个配置中,我们指定了数据库的URL、用户名、密码和驱动类。如果你希望使用连接池,可以添加连接池的相关配置,这里以Hikari连接池为例。

3. MyBatis Plus 配置

MyBatis Plus的配置通常需要继承MybatisPlusConfigurerAdapter类,并通过@Configuration注解标记为配置类。以下是一个简单的配置示例:

java 复制代码
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan("com.example.mapper") // 扫描 Mapper 接口所在的包
public class MybatisPlusConfig {

    @Bean
    public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/*.xml"));
        sessionFactoryBean.setConfiguration(mybatisConfiguration());
        sessionFactoryBean.setPlugins(new Interceptor[]{paginationInterceptor()});

        return sessionFactoryBean;
    }

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    private MybatisConfiguration mybatisConfiguration() {
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setCacheEnabled(false);

        return configuration;
    }
}

在这个配置类中,我们使用@MapperScan注解指定了Mapper接口的扫描路径,并通过@Bean注解配置了MybatisSqlSessionFactoryBean。此外,我们还配置了分页插件PaginationInterceptor以及一些MyBatis的基本配置,比如下划线转驼峰、关闭缓存等。

4. 动态数据源配置(多数据源)

在一些复杂的项目中,可能需要配置多个数据源以满足不同业务需求。Spring Boot通过AbstractRoutingDataSource提供了动态数据源的支持。以下是一个简单的多数据源配置示例:

java 复制代码
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

public class DynamicDataSource extends AbstractRoutingDataSource {

    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();

    public DynamicDataSource(DataSource defaultDataSource, Map<Object, Object> targetDataSources) {
        super.setDefaultTargetDataSource(defaultDataSource);
        super.setTargetDataSources(new HashMap<>(targetDataSources));
       

 super.afterPropertiesSet();
    }

    public static void setDataSource(String dataSourceKey) {
        CONTEXT_HOLDER.set(dataSourceKey);
    }

    public static String getDataSource() {
        return CONTEXT_HOLDER.get();
    }

    public static void clearDataSource() {
        CONTEXT_HOLDER.remove();
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return getDataSource();
    }
}

上述代码中,我们继承了AbstractRoutingDataSource,并通过ThreadLocal来保存当前数据源的key。在具体的业务中,通过调用DynamicDataSource.setDataSource("dataSourceKey")来切换数据源。

5. 小结

通过以上步骤,我们完成了在Spring Boot项目中配置MyBatis Plus数据源的过程。首先引入MyBatis Plus的相关依赖,然后在application.properties或application.yml中配置数据源,接着通过一个配置类进行MyBatis Plus的相关配置。最后,如果需要多数据源支持,可以使用AbstractRoutingDataSource实现动态数据源的切换。

在实际项目中,根据具体的业务需求,可能还需要更详细的配置和优化。希望本文的内容对你在Spring Boot项目中使用MyBatis Plus提供一些帮助。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏

📜您可能感兴趣的内容:

相关推荐
Nuanyt12 分钟前
LeetCode Hot100 刷题笔记 · 普通数组专题
java·笔记·算法·leetcode
cfm_29141 小时前
Leaf-segment号段模式
java
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 发布圈子动态:数据库表和接口文档介绍
java·数据库·交友
paopaokaka_luck2 小时前
智慧电玩店管理系统(空闲机台随机分配、游玩时长概率模拟、积分自动结算、积分兑换闭环、 ECharts经营分析、 腾讯地图选址)
java·人工智能·mysql·echarts·推荐算法
LMT流氓兔2 小时前
第五单元——第9课:防止同一次操作重复执行
java·服务器·数据库·算法·ai·langchain
OxYGC2 小时前
Spring 面经系列 · 第 6 篇:Spring MVC 请求全流程、父子容器与零配置原理
java·spring·mvc
code2cat2 小时前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
bksczm2 小时前
Redis数据结构之string
java·redis·mybatis
cc_瀚海知行2 小时前
资料检索 1|直接放入全文、按需读文件和先检索,有什么区别?
java·人工智能·ai
BioRunYiXue3 小时前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html