返回

Spring Boot MyBatis Plus 数据源详细配置教程

后端

MyBatis Plus 数据源配置:打造高效持久化解决方案

引言

MyBatis Plus 是一个功能强大的 Java 对象关系映射框架,它可以极大简化与数据库的交互。与 Spring Boot 集成后,MyBatis Plus 提供了更简洁、高效的持久化解决方案。本文将深入探讨 MyBatis Plus 的数据源配置,涵盖单数据源、多数据源和动态数据源配置,助你轻松打造高效的持久化系统。

单数据源配置

单数据源配置是最简单的 MyBatis Plus 数据源配置方式。你可以通过在 application.properties 文件中配置以下属性来实现:

spring.datasource.url=jdbc:mysql://localhost:3306/my_database
spring.datasource.username=root
spring.datasource.password=123456

或者,你也可以通过 Java 代码配置数据源:

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/my_database");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
}

多数据源配置

如果你的项目需要连接多个数据库,你可以使用 MyBatis Plus 的多数据源功能。在 application.properties 文件中配置以下属性:

spring.datasource.dynamic.primary=db1
spring.datasource.dynamic.datasource.db1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.dynamic.datasource.db1.username=root
spring.datasource.dynamic.datasource.db1.password=123456
spring.datasource.dynamic.datasource.db2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.dynamic.datasource.db2.username=root
spring.datasource.dynamic.datasource.db2.password=123456

或者,你也可以通过 Java 代码配置多数据源:

@Configuration
public class DynamicDataSourceConfig {

    @Bean
    public DynamicDataSource dataSource() {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        Map<Object, Object> dataSourceMap = new HashMap<>();
        DataSource db1DataSource = new DruidDataSource();
        db1DataSource.setUrl("jdbc:mysql://localhost:3306/db1");
        db1DataSource.setUsername("root");
        db1DataSource.setPassword("123456");
        DataSource db2DataSource = new DruidDataSource();
        db2DataSource.setUrl("jdbc:mysql://localhost:3306/db2");
        db2DataSource.setUsername("root");
        db2DataSource.setPassword("123456");
        dataSourceMap.put("db1", db1DataSource);
        dataSourceMap.put("db2", db2DataSource);
        dynamicDataSource.setTargetDataSources(dataSourceMap);
        dynamicDataSource.setDefaultTargetDataSource(db1DataSource);
        return dynamicDataSource;
    }
}

动态数据源配置

动态数据源配置允许你根据需要动态切换数据源。这对于需要根据业务场景访问不同数据库的项目非常有用。你可以通过在 application.properties 文件中配置以下属性来实现:

spring.datasource.dynamic.primary=db1
spring.datasource.dynamic.datasource.db1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.dynamic.datasource.db1.username=root
spring.datasource.dynamic.datasource.db1.password=123456
spring.datasource.dynamic.datasource.db2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.dynamic.datasource.db2.username=root
spring.datasource.dynamic.datasource.db2.password=123456
spring.datasource.dynamic.datasource.db3.url=jdbc:mysql://localhost:3306/db3
spring.datasource.dynamic.datasource.db3.username=root
spring.datasource.dynamic.datasource.db3.password=123456

或者,你也可以通过 Java 代码配置动态数据源:

@Configuration
public class DynamicDataSourceConfig {

    @Bean
    public DynamicDataSource dataSource() {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        Map<Object, Object> dataSourceMap = new HashMap<>();
        DataSource db1DataSource = new DruidDataSource();
        db1DataSource.setUrl("jdbc:mysql://localhost:3306/db1");
        db1DataSource.setUsername("root");
        db1DataSource.setPassword("123456");
        DataSource db2DataSource = new DruidDataSource();
        db2DataSource.setUrl("jdbc:mysql://localhost:3306/db2");
        db2DataSource.setUsername("root");
        db2DataSource.setPassword("123456");
        DataSource db3DataSource = new DruidDataSource();
        db3DataSource.setUrl("jdbc:mysql://localhost:3306/db3");
        db3DataSource.setUsername("root");
        db3DataSource.setPassword("123456");
        dataSourceMap.put("db1", db1DataSource);
        dataSourceMap.put("db2", db2DataSource);
        dataSourceMap.put("db3", db3DataSource);
        dynamicDataSource.setTargetDataSources(dataSourceMap);
        dynamicDataSource.setDefaultTargetDataSource(db1DataSource);
        return dynamicDataSource;
    }
}

MyBatis Plus 配置

除了数据源配置,还需要对 MyBatis Plus 进行一些配置,包括:

  • 配置 Mapper XML 文件的位置:
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
  • 配置全局配置:
@Configuration
public class MyBatisPlusConfig {

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setDbType(DbType.MYSQL);
        globalConfig.setIdType(IdType.AUTO);
        return globalConfig;
    }
}

常见问题解答

  1. 如何切换动态数据源?
    你可以使用 DataSourceContextHolder 类来切换动态数据源。例如:

    DataSourceContextHolder.setDataSourceKey("db2");
    
  2. 如何自定义 MyBatis Plus 拦截器?
    你可以通过实现 Interceptor 接口来创建自定义拦截器。例如:

    @Component
    public class CustomInterceptor implements Interceptor {
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            // 拦截器逻辑
            return invocation.proceed();
        }
    }
    
  3. 如何配置 MyBatis Plus 扫描实体类?
    你可以通过在 application.properties 文件中配置以下属性来扫描实体类:

    mybatis-plus.type-aliases-package=com.example.domain
    
  4. 如何使用 MyBatis Plus 的代码生成器?
    你可以通过使用 mybatis-plus-generator 依赖来使用 MyBatis Plus 的代码生成器。例如:

    mvn archetype:generate -DarchetypeArtifactId=mybatis-plus-generator-archetype \
                             -DarchetypeGroupId=com.baomidou.mybatisplus \
                             -DarchetypeVersion=3.5.2
    
  5. 如何将 MyBatis Plus 整合到 Spring Security 中?
    你可以通过使用 mybatis-plus-security 依赖来将 MyBatis Plus 整合到 Spring Security 中。例如:

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-security</artifactId>
        <version>1.0.5</version>
    </dependency>
    

结语

MyBatis Plus 的数据源配置提供了灵活性,让你可以根据需要配置单数据源、多数据源或动态数据源。通过了解这些配置选项,你可以为你的项目选择最合适的解决方案,打造高效、易维护的持久化系统。