mybatis plus配置多个sqlsessionfactory, 存在mapper.xml注入的mapper对象,指定的数据源错误
时间: 2024-05-11 17:19:10 浏览: 139
如果存在多个SqlSessionFactory,且在使用Mapper接口时没有指定对应的SqlSessionFactory,则MyBatis-Plus默认使用第一个SqlSessionFactory。因此,如果指定的数据源错误,可能会导致Mapper对象注入的错误数据源。
为了解决这个问题,可以在使用Mapper接口时,指定对应的SqlSessionFactory。方法如下:
1. 在配置文件中,为每个数据源都配置一个SqlSessionFactory,并指定一个唯一的名称。
```xml
<bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 配置数据源属性 -->
</bean>
<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
<!-- 配置其他属性 -->
</bean>
<bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 配置数据源属性 -->
</bean>
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2" />
<!-- 配置其他属性 -->
</bean>
```
2. 在Mapper接口上,使用@MapperScan注解,指定对应的SqlSessionFactory。例如:
```java
@MapperScan(basePackages = "com.example.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1")
public interface Mapper1 {
// ...
}
@MapperScan(basePackages = "com.example.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2")
public interface Mapper2 {
// ...
}
```
3. 在使用Mapper接口时,指定对应的SqlSessionFactory。例如:
```java
@Autowired
@Qualifier("sqlSessionFactory1")
private SqlSessionFactory sqlSessionFactory1;
@Autowired
@Qualifier("sqlSessionFactory2")
private SqlSessionFactory sqlSessionFactory2;
public void test() {
// 使用Mapper1接口,并指定对应的SqlSessionFactory
Mapper1 mapper1 = new SqlSessionTemplate(sqlSessionFactory1).getMapper(Mapper1.class);
// 使用Mapper2接口,并指定对应的SqlSessionFactory
Mapper2 mapper2 = new SqlSessionTemplate(sqlSessionFactory2).getMapper(Mapper2.class);
// ...
}
```
通过以上方法,可以在使用Mapper接口时,指定对应的SqlSessionFactory,从而避免Mapper对象注入的错误数据源。
阅读全文