SessionFactory
<bean id="sqlSessionFactoryForA" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath*:com/**/mapper1/*Mapper*.xml" />
<property name="dataSource" ref="dataSourceForA" />
<property name="typeAliasesPackage" value="com.zlx.***.dal" />
</bean>
(3)配置扫描器,扫描指定路径的mapper生成数据库操作代理类
<mybatis:scan base-package="com.zlx1.***.dal" factory-ref="sqlSessionFactoryForA" annotation="javax.annotation.Resource"/>
(4)数据源配置
<bean id="dataSourceForB" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="${db_url}" />
<property name="username" value="$db_user}" />
<property name="password" value="${db_passwd}" />
<property name="maxWait" value="${db_maxWait}" />
<property name="maxActive" value="28" />
<property name="initialSize" value="2" />
<property name="minIdle" value="0" />
<property name="timeBetweenEvictionRunsMillis" value="300000" />
<property name="testOnBorrow" value="false" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="select 1 from dual" />
<property name="filters" value="stat" />
</bean>
(5)创建sqlSessionFactory
<bean id="sqlSessionFactoryForB" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath*:com/**/mapper/*Mapper*.xml" />
<property name="dataSource" ref="dataSourceForB" />
<property name="typeAliasesPackage" value="com.zlx.***.dal" />
</bean>
(6)配置扫描器,扫描指定路径的mapper生成数据库操作代理类
<mybatis:scan base-package="com.zlx.***.dal" factory-ref="sqlSessionFactoryForB" annotation="javax.annotation.Resource"/>
与上节不同在在于(3)(6)
3.2 原理简单介绍
这里只看 <mybatis:scan/> 标签解析,按照惯例看jar包的spring.handler找标签解析
?MapperScannerBeanDefinitionParser的代码如下:
可知MapperScannerBeanDefinitionParser所做的事情和MapperScannerConfigurer类似都是内部搞了个ClassPathMapperScanner。
四、SpringBoot中Mybatis的配置方案
4.1 SpringBoot中多数据源使用
数据源一配置:
//三、设置扫描器
@MapperScan(basePackages = "com.alibaba.zlx.web.speech.mapper",sqlSessionFactoryRef="sqlSessionFactory1")
public class TddlAutoConfiguration {
@Autowired
private TddlProperties properties;
//一、创建数据源
@Primary
@Bean(name = "dataSource1")
public DataSource dataSource1() throws TddlException {
TDataSource dataSource = new TDataSourc