SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法


Posted in Java/Android onJuly 07, 2022

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();
    }
}

到此这篇关于SpringBoot项目多数据源及mybatis 驼峰失效的问题解决的文章就介绍到这了,更多相关SpringBoot多数据源mybatis 驼峰内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
分享一些Java的常用工具
Jun 11 Java/Android
Java输出Hello World完美过程解析
Jun 13 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
logback如何自定义日志存储
Aug 30 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
springcloud整合seata
May 20 Java/Android
SpringBoot全局异常处理方案分享
May 25 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
利用Java连接Hadoop进行编程
Jun 28 #Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 #Java/Android
Java多线程并发FutureTask使用详解
java.util.NoSuchElementException原因及两种解决方法
Jun 28 #Java/Android
Java实现HTML转为Word的示例代码
Jun 28 #Java/Android
Android实现图片九宫格
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 #Java/Android
You might like
ThinkPHP中redirect用法分析
2014/12/05 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
PHP7 新增功能
2021/03/09 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
饲料采购员岗位职责
2013/12/19 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
倡议书作文
2015/01/19 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
Nginx动静分离配置实现与说明
2022/04/07 Servers
Golang 实现WebSockets
2022/04/24 Golang