SpringBoot 通过配置类的方式配置 MybatisPlus
有时候因为某些原因,配置文件的配置无法满足我们的要求(如2个mapper要查询不同的数据库)可以通过配置类的形势配置2个mapper查询不同的数据库:
示例:有3个mapper接口要查询不同的数据库
1 配置文件配置3个mapper的数据库配置
spring:
datasource:
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: root
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: root
db3:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db3?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: root
2 新增加3个配置类配置
@Configuration
@MapperScan(basePackages = "org.gjw.mapper.db1",sqlSessionFactoryRef = "db1SqlSessionFactory")
public class MybatisPlusConfigDb1 {
/**
* 读取 spring.datasource.db1的数据库配置
**/
@Bean("db1Datasource")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource db1Datasource(){
return new HikariDataSource();
}
@Bean("db1TransactionManager")
public TransactionManager transactionManager(@Qualifier("db1Datasource") DataSource db1Datasource){
//设置 transactional 事务
return new DataSourceTransactionManager(db1Datasource);
}
@Bean("db1SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("db1Datasource") DataSource db1Datasource) throws Exception {
//注意这里是mybatis-plus内的 SqlSessionFactoryBean
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
//设置datasource
sqlSessionFactoryBean.setDataSource(db1Datasource);
//获取mapper资源
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db1/**/*.xml");
//设置mapper的位置,注意3个mepper对应的xml得分别放在3个不同的包
sqlSessionFactoryBean.setMapperLocations(resources);
//其他配置 ps:sqlSessionFactoryBean内可以配置yml的一切配置
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
//是否下划线转驼峰
mybatisConfiguration.setMapUnderscoreToCamelCase(false);
//设置日志
mybatisConfiguration.setLogImpl(StdOutImpl.class);
//配置别名包
sqlSessionFactoryBean.setTypeAliasesPackage("org.gjw.bean.db1");
sqlSessionFactoryBean.setConfiguration(mybatisConfiguration);
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setBanner(false);
sqlSessionFactoryBean.setGlobalConfig(globalConfig);
return sqlSessionFactoryBean.getObject();
}
@Bean("db1SqlSessionTemplate")
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory ){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
其余2个参考则配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通