继上次博客之后,继续对spring配置文件进行改造
使用MapperFactoryBean注入映射器链接:https://blog.csdn.net/qq_41172416/article/details/82256429
applicationContext.xml文件
思考:为什么此处定义了SqlSessionFactory的Bean却没有向MapperScannerConfigurer中注入?
注意:使用以下配置需要引入 context 命名空间
<?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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 获得sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 映射数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 映射mybatis核心配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 映射mapper文件 -->
<property name="mapperLocations">
<list>
<value>classpath:com/bdqn/dao/**/*.xml</value>
</list>
</property>
</bean>
<!--使用(MapperScannerConfigurer)创建的所有映射器实现都会被自动注入sqlSessionFactory实例 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置了多个sqlSessionFactory时,需要指定所依赖的sqlSessionFactory实例 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.bdqn.dao" />
</bean>
<!--配置扫描注解定义的业务 Bean -->
<context:component-scan base-package="com.bdqn.service" />
</beans>
对以上配置文件的解析
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置了多个sqlSessionFactory时,需要指定所依赖的sqlSessionFactory实例 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.bdqn.dao" />
</bean>
sqlSessionFactoryBeanName:当有多个sqlSessionFactory实例时,才需要配置
basePackage :指定了扫描的基准包,多个包名之间用逗号或分号隔开。
MapperScannerConfigurer :会为所有由它创建的映射器实现开启自动装配。也就是说,MapperScannerConfigurer 创建的所有 映射器实现都会被自动注入SqlSessionFactory 实例,这就是没有手动注入的原因。