SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
作者:helloliyh 时间:2023-07-25 07:09:08
1 配置多数据源时,application.yml 的有关mybatis的配置是失效的,因为他不知道配置哪一个数据源
2 application.yml 配置文件
server:
# 服务器的HTTP端口
port: 8097
spring:
# 配置数据源
datasource:
master:
jdbc-url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
test:
jdbc-url: jdbc:mysql://localhost:3306/test2?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# MyBatis配置
mybatis:
# 搜索指定包别名
# (如果 typeAliasesPackage不进行配置,resultType就得写全名resultType="com.liyh.entity.User",
# 但是如果配置了别名,就可以不用写全路径直接写resultType="User"即可)
type-aliases-package: com.liyh.entity
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapper-locations: classpath*:mapper/**/*Mapper.xml
# 使用驼峰命名
# 数据库表列:user_name
# 实体类属性:userName
configuration:
map-underscore-to-camel-case: true
3 解决方法一
1 application.yml 的配置驼峰保留
2 定义全局的配置
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration configuration() {
return new org.apache.ibatis.session.Configuration();
}
3 在sqlSessionFactory中设置配置
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource, org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.liyh.entity");
sqlSessionFactoryBean.setConfiguration(configuration);
return sqlSessionFactoryBean.getObject();
}
4 完整代码
package com.liyh.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.liyh.mapper"}, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MybatisMasterConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置事务管理器,不然事务不起作用
*
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration configuration() {
return new org.apache.ibatis.session.Configuration();
}
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource, org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.liyh.entity");
sqlSessionFactoryBean.setConfiguration(configuration);
return sqlSessionFactoryBean.getObject();
}
}
4解决方法二
1 在 sqlSessionFactory 返回的 bean 中设置驼峰
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.liyh.entity");
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
2 完整代码
package com.liyh.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.liyh.mapper"}, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MybatisMasterConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置事务管理器,不然事务不起作用
*
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration configuration() {
return new org.apache.ibatis.session.Configuration();
}
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource, org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.liyh.entity");
sqlSessionFactoryBean.setConfiguration(configuration);
return sqlSessionFactoryBean.getObject();
}
}
来源:https://www.cnblogs.com/liyhbk/p/16198626.html
标签:SpringBoot,多数据源,mybatis,驼峰
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
在Spring中自动装配Bean的属性
2022-01-29 07:01:28
C#集合之集(set)的用法
2023-05-18 06:04:53
通过实例了解Java 8创建Stream流的5种方法
2023-04-13 22:41:02
![](https://img.aspxhome.com/file/2023/8/77398_0s.jpg)
android系统在静音模式下关闭camera拍照声音的方法
2021-09-04 00:34:20
![](https://img.aspxhome.com/file/2023/7/137207_0s.gif)
Java常用工具类汇总 附示例代码
2022-07-21 17:54:15
![](https://img.aspxhome.com/file/2023/1/118891_0s.png)
Android开发中关于获取当前Activity的一些思考
2023-07-14 07:35:34
Spring如何使用@Indexed加快启动速度
2022-05-02 10:50:40
![](https://img.aspxhome.com/file/2023/6/62236_0s.jpg)
Java并发编程之对象的共享
2023-01-09 15:18:18
Google Kaptcha 框架实现登录验证码功能(SSM 和 SpringBoot)
2023-01-14 09:21:38
![](https://img.aspxhome.com/file/2023/7/129137_0s.png)
Java快速掌握Vector类方法
2023-11-24 22:49:18
![](https://img.aspxhome.com/file/2023/1/60241_0s.png)
c#实现哈夫曼树算法
2022-11-24 08:25:02
Kotlin原理详析之拓展函数
2023-04-10 19:54:08
ListView用法中与滚动相关的需求实现
2021-06-08 09:00:08
![](https://img.aspxhome.com/file/2023/1/100091_0s.png)
JAVA 继承基本类、抽象类、接口介绍
2022-11-11 00:09:40
Android左右滑出菜单实例分析
2021-06-20 11:29:20
![](https://img.aspxhome.com/file/2023/2/138092_0s.gif)
亲手教你SpringBoot中的多数据源集成问题
2023-08-19 02:57:20
关于SpringBoot使用Redis空指针的问题(不能成功注入的问题)
2023-09-04 01:30:03
![](https://img.aspxhome.com/file/2023/2/61302_0s.png)
C# FTP操作类分享
2022-05-11 22:03:49
C# 获取硬盘号,CPU信息,加密解密技术的步骤
2023-04-23 10:37:50
Android自定义View实现渐变色进度条
2022-11-25 08:27:17
![](https://img.aspxhome.com/file/2023/4/98694_0s.png)