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 相关文章推荐
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
Java设计模式之代理模式
Apr 22 Java/Android
Spring JPA 增加字段执行异常问题及解决
Jun 10 Java/Android
springboot读取resources下文件的方式详解
Jun 21 Java/Android
利用Java连接Hadoop进行编程
Jun 28 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
8个PHP数组面试题
2015/06/23 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
window.onload使用指南
2015/09/13 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
Python选课系统开发程序
2016/09/02 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Django 重写用户模型的实现
2019/07/29 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
劳动纠纷调解协议书格式
2014/11/30 职场文书
文明倡议书
2015/01/19 职场文书
教务处教学工作总结
2015/08/10 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
分享python函数常见关键字
2022/04/26 Python