详细 介绍springboot mybatis 多数据源 dao
时间: 2023-05-20 09:05:24 浏览: 162
Spring Boot 是一个快速开发框架,MyBatis 是一个优秀的持久层框架,多数据源是指在一个应用程序中使用多个数据源。在 Spring Boot 中使用 MyBatis 实现多数据源的方式有很多种,其中一种常用的方式是使用 Spring Boot 的自动配置功能。
首先,在 pom.xml 文件中添加 MyBatis 和数据库驱动的依赖:
```
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
```
然后,在 application.properties 文件中配置多个数据源:
```
# 主数据源
spring.datasource.url=jdbc:mysql://localhost:3306/main_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 从数据源
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
```
接着,创建多个数据源的配置类:
```
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.main", sqlSessionTemplateRef = "mainSqlSessionTemplate")
public class MainDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource mainDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory mainSqlSessionFactory(@Qualifier("mainDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.secondary", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
最后,在 DAO 层中使用 @Qualifier 注解指定使用哪个数据源:
```
@Repository
public interface MainMapper {
@Select("SELECT * FROM main_table")
@Qualifier("mainSqlSessionTemplate")
List<Main> findAll();
}
@Repository
public interface SecondaryMapper {
@Select("SELECT * FROM secondary_table")
@Qualifier("secondarySqlSessionTemplate")
List<Secondary> findAll();
}
```
这样就可以在一个应用程序中使用多个数据源了。
阅读全文