MapperScannerConfigurer 作用详解

本文详细介绍了如何在Spring框架中集成MyBatis,包括使用MapperScannerConfigurer自动扫描并生成Mapper接口代理,以及通过SqlSessionFactoryBean实现数据源配置与初始化。深入解析了MyBatis与Spring集成的核心机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动扫描 将Mapper接口生成代理注入到Spring

	<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.em" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>
  • MapperFactoryBean 创建的代理类实现了 UserMapper 接口,并且注入到应用程序中
  • 把Mapper接口转换成MapperFactoryBean
    • 其实在SqlSessionFactoryBean 里面就已经实现了注册了 MapperProxyFactory 到Mybatis
    • 这里做的是把它们托管到spring
{
    if (this.processPropertyPlaceHolders) {
      processPropertyPlaceHolders();
    }

    ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
    scanner.setAddToConfig(this.addToConfig);
    scanner.setAnnotationClass(this.annotationClass);
    scanner.setMarkerInterface(this.markerInterface);
    scanner.setSqlSessionFactory(this.sqlSessionFactory);
    scanner.setSqlSessionTemplate(this.sqlSessionTemplate);
    scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);
    scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName);
    scanner.setResourceLoader(this.applicationContext);
    scanner.setBeanNameGenerator(this.nameGenerator);
    scanner.registerFilters();
    scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS));
  }
  • 注意,不管先后顺序
    • SqlSessionFactoryBean 继承了InitializingBean 接口

      • 会在所有spring 注册完成后,执行afterPropertiesSet方法
      • 
        public void afterPropertiesSet() throws Exception {
            Assert.notNull(this.dataSource, "Property 'dataSource' is required");
            Assert.notNull(this.sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
            this.sqlSessionFactory = this.buildSqlSessionFactory();
        }
        

         

  •  

转载于:https://my.oschina.net/u/3847203/blog/3019082

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值