SSM之一步一坑:mybatis 连接多个数据库

一、根据业务需求,在一个ssm后台中要连接两个不同的Mysql数据库,现将解决方案记录如下

参考本文档应该已经搭建好SSM框架,且运行完成一个简单的Demo,我参考的SSM搭建连接如下

https://cloud.tencent.com/developer/article/1333024

现在在上述连接基础上增加一个数据库连接。

言归正传,下面介绍如何使用SSM架构连接两个数据库

二、使用SSM中的mybatis-spring.xml中配置连接

参考网上连接,有很多种方式,但是我感觉还是在mybatis中配置数据库连接属性相对简单点,具体效果如何还得以后分析。

根据上述给的连接,配置的resource文件夹应该长这样,

mybatis-spring.xml 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.0.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

	<!-- 配置数据源 -->
	<!-- 自动扫描 -->
	<!-- 第一种方式:加载一个properties文件 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location"
			value="classpath:mysqldb.properties" />
	</bean>

	<!-- 阿里 druid 数据库连接池 -->
	<bean id="dataSource"
		class="com.alibaba.druid.pool.DruidDataSource">
		<!-- 基本属性 url、user、password -->
		<property name="driverClassName"
			value="${jdbc.driverClassName}" /><!--这个是为了测试加载的properties是否成功,可以直接更改为数据库连接驱动com.mysql.cj.jdbc.Driver-->
		<property name="url"
			value="jdbc:mysql://127.0.0.1:3306/wisdom?useUnicode=true&amp;useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=UTF-8" />
		<property name="username" value="XXX" />
		<property name="password" value="XXX" />
		<property name="initialSize" value="1" />
		<property name="minIdle" value="1" />
		<property name="maxActive" value="20" />
		<property name="maxWait" value="60000" />
		<!-- 超过时间限制是否回收 -->
		<property name="removeAbandoned" value="true" />
		<!-- 超过时间限制多长; -->
		<property name="removeAbandonedTimeout" value="180" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<!-- 用来检测连接是否有效的sql,要求是一个查询语句 -->
		<property name="validationQuery" value="SELECT 1" />
		<!-- 申请连接的时候检测 -->
		<property name="testWhileIdle" value="true" />
		<!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
		<property name="testOnBorrow" value="false" />
		<!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
		<property name="testOnReturn" value="false" />
	</bean>


	<!-- ========================================分隔线========================================= -->

	<!-- ========================================针对myBatis的配置项============================== -->
	<!-- 配置sqlSessionFactory -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
		<property name="configLocation" value="classpath:two-mybatis-config.xml" />
		<property name="dataSource" ref="dataSource" />
		<!-- 自动扫描me/gacl/mapping/目录下的所有SQL映射的xml文件, 省掉Configuration.xml里的手工配置 value="classpath:me/gacl/mapping/*.xml"指的是classpath(类路径)下me.gacl.mapping包中的所有xml文件 
			UserMapper.xml位于me.gacl.mapping包下,这样UserMapper.xml就可以被自动扫描 -->
		<!-- <property name="mapperLocations" value="classpath:me/gacl/mapping/*.xml" 
			/> -->
	</bean>
	<!-- 扫描dao接口 -->
	<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.huawei.dao" />
		<!-- 使用sqlSessionFactoryBeanName属性,注入不同的sqlSessionFactory的名称,这样的话,就为不同的数据库对应的 mapper 接口注入了对应的 sqlSessionFactory -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<!-- 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	
	


	<!-- ========================================分隔线========================================= -->

	<!-- ========================================针对myBatis的配置项============================== -->
	<!-- 注:定义2个MapperScannerConfigurer 时要保证两个映射dao接口不能处于同一个包下。不然会发生找不到第二个dao接口方法异常 -->
	<!-- 第二个数据库连接 -->
	<bean id="dataSource_two"
		class="com.alibaba.druid.pool.DruidDataSource">
		<!-- 基本属性 url、user、password -->
		<property name="driverClassName"
			value="${jdbc.driverClassName}" />
		<property name="url"
			value="jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&amp;useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=UTF-8" />
		<property name="username" value="XXX" />
		<property name="password" value="XXX" />
		<property name="initialSize" value="1" />
		<property name="minIdle" value="1" />
		<property name="maxActive" value="20" />
		<property name="maxWait" value="60000" />
		<!-- 超过时间限制是否回收 -->
		<property name="removeAbandoned" value="true" />
		<!-- 超过时间限制多长; -->
		<property name="removeAbandonedTimeout" value="180" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<!-- 用来检测连接是否有效的sql,要求是一个查询语句 -->
		<property name="validationQuery" value="SELECT 1" />
		<!-- 申请连接的时候检测 -->
		<property name="testWhileIdle" value="true" />
		<!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
		<property name="testOnBorrow" value="false" />
		<!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
		<property name="testOnReturn" value="false" />
	</bean>

	<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 第二个数据库链接 -->
	<!-- 配置sqlSessionFactory -->
	<bean id="sqlSessionFactory_two"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
		<property name="configLocation" value="classpath:mybatis-config.xml" />
		<property name="dataSource" ref="dataSource_two" />
		<!-- 自动扫描映射文件路径 -->
		<!-- <property name="mapperLocations" value="com/huawei/mapping/*.xml" 
			/> -->
	</bean>

	<!-- 第二个数据库DAO连接-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.huawei.song" />
		<property name="sqlSessionFactoryBeanName"
			value="sqlSessionFactory_two" />
	</bean>
 
	<!-- 事务管理器 -->
	<bean id="transactionManager_two"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource_two" />
	</bean>




	<!-- ========================================分隔线========================================= -->
	<tx:annotation-driven
		transaction-manager="transactionManager" />
</beans>

完成两个数据库连接只需要设置这一个文件,然后我这里验证了下,两个数据库查询,成功。

三、运行结果

注意点

mybatis-spring.xml 中介绍已经很详细,需要注意的一点是,在两个数据库的dao接口不能在同一个包下,就因为这个坑,玩了好久

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值