MyBatis-Plus數(shù)據(jù)庫配置與數(shù)據(jù)源整合方案
在使用 MyBatis-Plus(MP)進(jìn)行開發(fā)時,正確配置和管理數(shù)據(jù)源是非常重要的一步。MyBatis-Plus 不僅支持 單數(shù)據(jù)源 的配置,還支持 多數(shù)據(jù)源 的配置和切換,適用于分布式系統(tǒng)中不同的數(shù)據(jù)庫管理和訪問場景。
本文將介紹 MyBatis-Plus 數(shù)據(jù)庫配置與數(shù)據(jù)源整合 的常見方法,包括單數(shù)據(jù)源與多數(shù)據(jù)源的配置、配置文件與 Spring 配置類的使用、以及如何進(jìn)行數(shù)據(jù)源切換和管理。
1. 單數(shù)據(jù)源配置
1.1 單數(shù)據(jù)源配置概述
在大多數(shù)應(yīng)用中,通常只需要一個數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫的操作。MyBatis-Plus 支持通過 Spring Boot 自動配置來簡化單數(shù)據(jù)源的配置。
1.2 數(shù)據(jù)源配置步驟
- 添加數(shù)據(jù)庫依賴
首先,在 pom.xml 文件中添加 MyBatis-Plus 和數(shù)據(jù)庫相關(guān)的依賴。
例如,使用 H2 數(shù)據(jù)庫作為示例:
<dependencies>
<!-- MyBatis-Plus 核心依賴 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.4.3</version>
</dependency>
<!-- Spring Boot MyBatis starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 數(shù)據(jù)庫連接池(H2 示例) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>- 配置數(shù)據(jù)庫連接
在 application.properties 或 application.yml 配置文件中添加數(shù)據(jù)源配置。
application.properties 配置示例:
# 數(shù)據(jù)庫連接配置 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.datasource.hibernate.ddl-auto=update # MyBatis-Plus 配置 mybatis-plus.mapper-locations=classpath:/mappers/**/*.xml mybatis-plus.type-aliases-package=com.example.domain
在該配置中:
spring.datasource用于配置數(shù)據(jù)庫的連接信息。mybatis-plus配置了 MyBatis-Plus 的基礎(chǔ)配置。
- 數(shù)據(jù)源自動配置
Spring Boot 會自動加載數(shù)據(jù)源和 MyBatis-Plus 配置,無需手動創(chuàng)建 DataSource 和 SqlSessionFactory 等對象。你只需要創(chuàng)建 Mapper 接口和實(shí)體類即可。
1.3 Spring Boot 自動配置
MyBatis-Plus 提供了開箱即用的自動配置。只要在 Spring Boot 項(xiàng)目中配置好數(shù)據(jù)源,MyBatis-Plus 會自動進(jìn)行配置,無需額外的手動配置。
2. 多數(shù)據(jù)源配置
2.1 多數(shù)據(jù)源配置概述
在一些復(fù)雜的應(yīng)用中,可能需要連接多個數(shù)據(jù)庫源。比如,可能需要一個主數(shù)據(jù)庫和多個副本數(shù)據(jù)庫,或者在分布式系統(tǒng)中連接不同的數(shù)據(jù)庫。
MyBatis-Plus 支持多數(shù)據(jù)源的配置和切換,具體可以通過配置不同的 DataSource 來實(shí)現(xiàn)。
2.2 多數(shù)據(jù)源配置步驟
- 添加數(shù)據(jù)庫依賴
首先,確保你已在 pom.xml 文件中添加所需數(shù)據(jù)庫的依賴。
- 配置多個數(shù)據(jù)源
在 application.yml 中定義多個數(shù)據(jù)源配置。
例如,配置一個 主數(shù)據(jù)源 和一個 副數(shù)據(jù)源:
spring:
datasource:
# 主數(shù)據(jù)源配置
primary:
url: jdbc:mysql://localhost:3306/primarydb
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
# 副數(shù)據(jù)源配置
secondary:
url: jdbc:mysql://localhost:3306/secondarydb
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root2.3 配置數(shù)據(jù)源和事務(wù)管理器
你需要在配置類中為每個數(shù)據(jù)源配置 DataSource、SqlSessionFactory 和 TransactionManager。
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = "com.example.mapper")
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource dataSourcePrimary() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSourceSecondary() {
return DataSourceBuilder.create().build();
}
// 配置主數(shù)據(jù)源的事務(wù)管理器
@Bean(name = "transactionManagerPrimary")
@Primary
public DataSourceTransactionManager transactionManagerPrimary(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// 配置副數(shù)據(jù)源的事務(wù)管理器
@Bean(name = "transactionManagerSecondary")
public DataSourceTransactionManager transactionManagerSecondary(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// 配置主數(shù)據(jù)源的 SqlSessionFactory
@Bean(name = "sqlSessionFactoryPrimary")
@Primary
public SqlSessionFactory sqlSessionFactoryPrimary(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
// 配置副數(shù)據(jù)源的 SqlSessionFactory
@Bean(name = "sqlSessionFactorySecondary")
public SqlSessionFactory sqlSessionFactorySecondary(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
}2.4 動態(tài)切換數(shù)據(jù)源
在應(yīng)用中使用動態(tài)數(shù)據(jù)源切換,Spring 提供了 @Primary 和 @Qualifier 注解來指定哪個數(shù)據(jù)源為主數(shù)據(jù)源,哪一個為副數(shù)據(jù)源。在進(jìn)行操作時,通過動態(tài)切換數(shù)據(jù)源來控制操作目標(biāo)。
public class DynamicDataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSource(String dataSource) {
contextHolder.set(dataSource);
}
public static String getDataSource() {
return contextHolder.get();
}
public static void clearDataSource() {
contextHolder.remove();
}
}切換數(shù)據(jù)源時:
DynamicDataSourceContextHolder.setDataSource("primary"); // 切換到主數(shù)據(jù)源3. 自動配置與手動配置的區(qū)別
3.1 自動配置
Spring Boot 提供了自動配置功能,MyBatis-Plus 默認(rèn)會通過配置文件自動配置數(shù)據(jù)源、SqlSessionFactory 和事務(wù)管理器等組件。如果項(xiàng)目只涉及單一數(shù)據(jù)源,Spring Boot 會根據(jù) application.properties 或 application.yml 中的配置自動進(jìn)行數(shù)據(jù)源配置。
自動配置的好處
- 減少配置:只需在配置文件中配置數(shù)據(jù)源,Spring Boot 會自動完成其余的配置工作。
- 簡化管理:對于單數(shù)據(jù)源應(yīng)用,使用自動配置更為簡單,開發(fā)者只需關(guān)注業(yè)務(wù)代碼。
自動配置示例
spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root
Spring Boot 會根據(jù)以上配置自動初始化 DataSource、SqlSessionFactory、TransactionManager 等組件。
3.2 手動配置
對于復(fù)雜的項(xiàng)目,尤其是涉及多數(shù)據(jù)源的情況,開發(fā)者通常需要手動配置數(shù)據(jù)源、SqlSessionFactory、事務(wù)管理器等。
這種方式提供了更大的靈活性,可以在不同的數(shù)據(jù)源之間進(jìn)行細(xì)粒度的控制和切換。
手動配置的好處
- 靈活性:可以手動控制每個數(shù)據(jù)源的配置,例如動態(tài)數(shù)據(jù)源切換、多個數(shù)據(jù)庫連接等。
- 擴(kuò)展性:適用于需要自定義配置、插件等場景。
手動配置示例
@Configuration
public class MyBatisConfig {
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create().url("jdbc:mysql://localhost:3306/mydb")
.username("root")
.password("root")
.build();
}
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
}4. 總結(jié)
- 單數(shù)據(jù)源配置:對于大多數(shù)應(yīng)用,MyBatis-Plus 配置單數(shù)據(jù)源時,可以通過 Spring Boot 的自動配置功能快速完成。
- 多數(shù)據(jù)源配置:在復(fù)雜的應(yīng)用場景中,可以手動配置多個數(shù)據(jù)源,通過動態(tài)切換實(shí)現(xiàn)數(shù)據(jù)庫的負(fù)載均衡和高可用性。
- 自動配置與手動配置的區(qū)別:自動配置適用于單數(shù)據(jù)源的場景,簡化了配置過程,而手動配置則提供了更大的靈活性,適用于多數(shù)據(jù)源的管理和動態(tài)切換。
通過合適的配置和管理,MyBatis-Plus 可以幫助開發(fā)者在 Spring Boot 應(yīng)用中高效管理數(shù)據(jù)源、簡化數(shù)據(jù)庫操作,并根據(jù)需求實(shí)現(xiàn)更加復(fù)雜的數(shù)據(jù)庫架構(gòu)。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java代碼實(shí)現(xiàn)Map和Object互轉(zhuǎn)及Map和Json互轉(zhuǎn)
這篇文章主要介紹了Java代碼實(shí)現(xiàn)map和Object互轉(zhuǎn)及Map和json互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下2016-05-05
Java利用Spire.Presentation for Java實(shí)現(xiàn)高效處理圖片轉(zhuǎn)PPT
在日常工作或?qū)W習(xí)中,我們經(jīng)常需要將大量的圖片整理成演示文稿,本文將聚焦于如何利用Spire.Presentation for Java這一強(qiáng)大的Java庫,輕松實(shí)現(xiàn)圖片到PowerPoint的轉(zhuǎn)換,希望對大家有所幫助2025-10-10
java實(shí)用小技巧之判斷l(xiāng)ist是否有重復(fù)項(xiàng)簡單例子
這篇文章主要給大家介紹了關(guān)于java實(shí)用小技巧之判斷l(xiāng)ist是否有重復(fù)項(xiàng)的相關(guān)資料,在開發(fā)工作中我們有時需要去判斷List集合中是否含有重復(fù)的元素,需要的朋友可以參考下2023-10-10
懶人 IDEA 插件推薦: EasyCode 一鍵幫你生成所需代碼(Easycode用法)
這篇文章主要介紹了懶人 IDEA 插件推薦: EasyCode 一鍵幫你生成所需代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
利用Postman和Chrome的開發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目)
這篇文章主要介紹了利用Postman和Chrome的開發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

