- 使用mybaitis的mapper接口执行sql语句时,我们拿到其实是接口实现类的代理,这个代理类是由mybatis使用动态代理生成的接口实现类。
- mybatis通过配置 MapperFactoryBean来生成Mapper接口的代理。如:
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.example.mapper.UserMapper" />
<!--
MapperFactoryBean继承了SqlSessionDaoSupport,在此将sqlSessionFactory注入
-->
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
上面这种配置的缺点是为每一个mapper接口都要加入配置,因此有了使用MapperScannerConfigurer,它会将包下的每个mapper接口都自动创建MapperFactoryBean,无需自己单独添加,MapperScannerConfigurer的配置如下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
<!-- 无需在此指定SqlSessionFactory或SqlSessionTemplate , 因为 MapperScannerConfigurer将会创建MapperFactoryBean之后自动装配。可以使用 sqlSessionFactoryBeanName或sqlSessionTemplateBeanName 属性来设置正确的bean 名称 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
下面是一个更简单的配置
<mybatis:scan base-package="com.example.mapper"/>
spring整合时的配置越来越简单,但是需要了解每个配置的原理