Mybatis-SqlSessionFactory/多数据源

2024-01-25 20:12

本文主要是介绍Mybatis-SqlSessionFactory/多数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面的代码演示了发送一个HTTP请求到Controller,如果key=“dev”,则查询dev数据库,否则查询默认的数据库

	@Resourceprivate SqlSessionFactory sqlSessionFactory;@Resourceprivate DataSource defaultDataSource;@Resourceprivate XXXMapper xxxMapper;@PostMapping("test")public Object test(@RequestParam("key") String key) {if (key.equals("dev")) {HikariDataSource devDataSource= new HikariDataSource();devDataSource.setJdbcUrl("jdbc:mysql://123.456.789:3306/数据库名?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true");devDataSource.setUsername("帐号");devDataSource.setPassword("密码");Environment environment = new Environment.Builder("dev").dataSource(devDataSource).transactionFactory(new JdbcTransactionFactory()).build();sqlSessionFactory.getConfiguration().setEnvironment(environment);} else {Environment environment = new Environment.Builder("default").dataSource(defaultDataSource).transactionFactory(new JdbcTransactionFactory()).build();sqlSessionFactory.getConfiguration().setEnvironment(environment);}// 这里执行sqlreturn xxxMapper.xxx方法();}

好了,文章到此结束,但是实际开发中,你需要对这段代码进行下面的优化
1.本文是全局修改数据源,如果是那种主从的系统(insert主库,select从库),则需要使用多个SqlSessionFactory
2.毕竟我是以硬编码的方式切换的数据源,每次切换,我都new了一个Environment ,实际开发中,一般都是通过ThreadLocal或者注解的方式,切换数据源

下面两个内容也是需要记住的:
1.Mybatis的SqlSessionFactory或者SqlSessionTemplate是一直持有DataSource引用的,所以直接修改这两个对象的DataSource即可
2.没必要写各种注解,各种@Bean的方式

如果想深入了解Spring对多数据源的支持,可查看AbstractRoutingDataSource,或许对你也有所启发

这篇关于Mybatis-SqlSessionFactory/多数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/644478

相关文章

MybatisPlus 多数据源切换@DS注解失效问题解决

《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以... 在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

Spring Boot 集成 mybatis核心机制

《SpringBoot集成mybatis核心机制》这篇文章给大家介绍SpringBoot集成mybatis核心机制,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值... 目录Spring Boot浅析1.依赖管理(Starter POMs)2.自动配置(AutoConfigu

在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南

《在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南》在SpringBoot和MyBatis项目中实现MySQL读写分离,主要有两种思路:一种是在应用层通过代码和配置手动控制... 目录如何选择实现方案核心实现:应用层手动分离实施中的关键问题与解决方案总结在Spring Boot和