mybatis 连接多个库(Spring MVC)
1.修改数据库配置database.properties文件
jdbc.url=jdbc:mysql://localhost:3306/hippo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull jdbc.username=root jdbc.password=root jdbc.driver=com.mysql.jdbc.Driver a.jdbc.url=jdbc:mysql://localhost:3306/hippo_auth?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull a.jdbc.username=root a.jdbc.password=root a.jdbc.driver=com.mysql.jdbc.Driver
2. 修改mybatis配置 applicationContext.xml文件
<bean id="aDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${a.jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10"/> <property name="maxIdle" value="5"/> </bean> <bean id="bDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10"/> <property name="maxIdle" value="5"/> </bean> <!-- 动态数据源,**.**.**.DatabaseContextHolder 屏蔽了包名,为具体选择数据库的类 --> <bean id="dynamicDataSource" class="**.**.**.DatabaseContextHolder"> <property name="defaultTargetDataSource" ref="aDataSource"/> <property name="targetDataSources"> <map> <entry key="aDataSource" value-ref="aDataSource"/> <entry key="bDataSource" value-ref="bDataSource"/> </map> </property> </bean>
<!--重点sqlSessionFactory的数据源配置项填写为动态数据源--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dynamicDataSource"/> <property name="typeAliasesPackage" value="com.mininglamp.hippo.db.model"/> <property name="configLocation" value="classpath:mybatis-mapper-config.xml"/> <property name="mapperLocations" value="classpath*:mapper/*.xml" /> </bean>
3.创建类DbcontextHolder
public class DbcontextHolder extends AbstractRoutingDataSource { public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * 设置当前数据源 * @param dbType */ public static void setDbType(String dbType){ contextHolder.set(dbType); } /** * 获得当前数据源 * @return */ public static String getDbType(){ String dbType = (String)contextHolder.get(); return dbType; } /** *清除上下文 * */ public void clearContext(){ contextHolder.remove(); } @Override protected Object determineCurrentLookupKey() { return DbcontextHolder.getDbType(); } }
4.在方法中连接不同数据库
//连接bDataSource进行查询 DbcontextHolder.setDbType("bDataSource"); Template template = templateMapperExtend.selectByPrimaryKey(templateId); //连接aDataSource进行插入 DbcontextHolder.setDbType("aDataSource"); siteAsyncMapper.insertSelective(siteAsync);
5.参考
https://blog.csdn.net/u010716879/article/details/78459529
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY