mybatis-plus配置多数据源
时间: 2023-05-31 07:18:39 浏览: 183
### 回答1:
Mybatis-plus 可以通过在配置文件中配置多个数据源来实现多数据源的支持。
1. 在 application.yml 或者 application.properties 中配置多个数据源,如:
```
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/slave?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
```
2. 在 mybatis-plus 的配置类中,通过注解 @ConfigurationProperties(prefix = "spring.datasource.master") 来指定使用哪个数据源。
3. 在 Service 中通过注解 @DS("slave") 来指定使用从库, @DS("master") 来指定使用主库。
参考代码:
```
@Configuration
@MapperScan(basePackages = "com.example.mapper", sqlSessionTemplateRef = "slaveSqlSessionTemplate")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public class SlaveDataSourceConfig {
@Bean(name = "slaveDataSource")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "slaveSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Service
@DS("slave")
public class TestService {
@Autowired
private TestMapper testMapper;
public List<Test> getAll() {
return testMapper.selectList(null);
}
}
```
需要注意的是,使用多数据源需要在项目中引入 mybatis-plus-extension 包,并且需要配置多数据源的事务管理器。
### 回答2:
Mybatis-plus是一个流行的Mybatis增强工具包,允许开发人员更容易地与数据库进行交互。在实际开发中,我们可能需要使用多个数据源来达到不同的业务需求。下面是配置Mybatis-plus多数据源的详细步骤。
1. 添加多数据源配置项
在application.yml中添加多个数据源配置,例如:
```yaml
# 主数据源配置
spring.datasource.master.url=jdbc:mysql://localhost:3306/master
spring.datasource.master.username=root
spring.datasource.master.password=root
# 从数据源配置
spring.datasource.slave.url=jdbc:mysql://localhost:3306/slave
spring.datasource.slave.username=root
spring.datasource.slave.password=root
```
2. 创建数据源对象
Mybatis-plus需要使用DruidDataSource数据源对象,因此需要创建多个数据源对象用于连接主从数据库。我们可以使用@Primary注解指定默认的数据源。
```java
@Configuration
public class DataSourceConfig {
@Primary
@Bean
@ConfigurationProperties("spring.datasource.master")
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.slave")
public DataSource slaveDataSource() {
return DruidDataSourceBuilder.create().build();
}
}
```
3. 配置Mybatis-plus的SqlSessionFactory和SqlSessionTemplate
我们需要为每个数据源创建SqlSessionFactory和SqlSessionTemplate。Mybatis-plus提供了MybatisSqlSessionFactoryBean和MybatisSqlSessionTemplate两个类,用于创建Mybatis的SqlSessionFactory和SqlSessionTemplate对象。
```java
@Configuration
@MapperScan(basePackages = {"com.example.mapper"})
public class MybatisConfig {
@Primary
@Bean
public MybatisSqlSessionFactoryBean masterSqlSessionFactory(
@Qualifier("masterDataSource") DataSource dataSource
) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean;
}
@Bean
public MybatisSqlSessionTemplate masterSqlSessionTemplate(
@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory
) {
return new MybatisSqlSessionTemplate(sqlSessionFactory);
}
@Bean
public MybatisSqlSessionFactoryBean slaveSqlSessionFactory(
@Qualifier("slaveDataSource") DataSource dataSource
) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean;
}
@Bean
public MybatisSqlSessionTemplate slaveSqlSessionTemplate(
@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory
) {
return new MybatisSqlSessionTemplate(sqlSessionFactory);
}
}
```
4. 创建多数据源的Mapper接口
我们需要为每个数据源创建一个Mapper接口,用于访问相应的数据库。可以使用@Mapper注解将Mapper接口注册到Spring容器中。同时,我们需要使用@Qualifier注解指定具体的SqlSessionTemplate来操作不同的数据库。
```java
@Mapper
@Component
public interface MasterMapper {
@Select("SELECT count(*) FROM user")
int countUser();
}
@Mapper
@Component
public interface SlaveMapper {
@Select("SELECT count(*) FROM book")
int countBook();
}
```
5. 测试使用多数据源
我们可以在业务代码中使用注入的Mapper来操作主从数据库,例如:
```java
@Service
public class TestService {
@Autowired
@Qualifier("masterSqlSessionTemplate")
private SqlSessionTemplate masterSqlSessionTemplate;
@Autowired
@Qualifier("slaveSqlSessionTemplate")
private SqlSessionTemplate slaveSqlSessionTemplate;
public int countUser() {
return masterSqlSessionTemplate.getMapper(MasterMapper.class).countUser();
}
public int countBook() {
return slaveSqlSessionTemplate.getMapper(SlaveMapper.class).countBook();
}
}
```
通过以上步骤,我们成功地配置了Mybatis-plus的多数据源。在实际开发中,如果需要使用更多的数据源,只需按照以上方法添加即可。
### 回答3:
Mybatis-plus是一个基于Mybatis的一款全面功能和增强功能的ORM框架,它可以简化Java开发人员在不同的数据库之间切换的过程。在Mybatis-plus中,我们可以很容易的配置多数据源,以满足应用中不同业务所需的数据源。
下面,我们来详细了解Mybatis-plus配置多数据源的步骤:
1. 导入依赖
在pom.xml文件中导入Mybatis-plus和对应的数据库驱动依赖,如下所示:
```xml
<!-- Mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-version}</version>
</dependency>
<!-- MySQL驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
```
2. 配置数据源
在application.properties文件中配置数据源,如下所示:
```properties
## 主数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=123456
## 次数据源
spring.second.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.second.datasource.url=jdbc:mysql://localhost:3306/db2
spring.second.datasource.username=root
spring.second.datasource.password=123456
```
3. 配置多数据源
在Mybatis-plus的配置文件中,我们通过定义多个数据源配置来实现多数据源的功能,如下所示:
```java
@Configuration
@MapperScan(basePackages = {"com.example.mapper1", "com.example.mapper2"}, sqlSessionTemplateRef = "sqlSessionTemplate")
public class MybatisPlusConfig {
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.second.datasource")
public DataSource secondDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "transactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager secondTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "secondSqlSessionTemplate")
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
在上述代码中,我们定义了两个数据源dataSource和secondDataSource,并分别配置了两个SqlSessionFactory、两个DataSourceTransactionManager以及两个SqlSessionTemplate。通过这种方式,就可以在应用中轻松切换不同的数据源,以满足应用中不同业务的需求。
总之,Mybatis-plus提供了非常简单的方式来配置多数据源,具体实现过程如上所示。对于开发者来说,如果要实现多数据源的切换,除了了解上述配置方式之外,还需要记住在使用时如何切换数据源,一定要注意正确使用。
阅读全文