源码:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({MapperScannerRegistrar.class})
public @interface MapperScan {
String[] value() default {};
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
Class<? extends Annotation> annotationClass() default Annotation.class;
Class<?> markerInterface() default Class.class;
String sqlSessionTemplateRef() default "";
String sqlSessionFactoryRef() default "";
Class<? extends MapperFactoryBean> factoryBean() default MapperFactoryBean.class;
}
属性解释:
- annotationClass : 这个是基于包下面扫描所有的接口类并注册,也有指定的属性。
- markInterface : 基于包下面扫描所有接口类并注册,也可以指定特殊的接口为父类。
- sqlSessionTemplateRef: 在指定使用sqlSessionTemplateRef的情况下,这里有一个或多个的Spring的容器。经常我们会使用一个或多个的数据库.
- sqlSessionFactoryRef : 在指定使用sqlSessionFactoryRef的情况下,这里有一个或多个的Spring的容器。经常我们会使用一个或多个的数据库.
- nameGenerator : 在Spring的容器中,将使用BeanNameGenerator去命名检测到的组件。
- basePackageClasses : 这是一个安全替代basePackages()作为指定组件的扫描包。包下面的所有接口都将会被扫描。
- basepackages : 基于包下面的扫描MyBatis的接口。注意是,只有是接口的将会被扫描注册,如果是具体的类将会被忽略。
运用举例:配置多数据源
@Configuration
@MapperScan(basePackages = "com.xxx", annotationClass = DatasourceRead.class, sqlSessionFactoryRef = DatasourceNewsReadConfig.SQL_SESSION_FACTORY_NAME)
public class DatasourceNewsReadConfig
{
public static final String SQL_SESSION_FACTORY_NAME = "sessionFactoryNewsRead";
public static final String TX_MANAGER = "txManagerNewsRead";
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Autowired
private MybatisProperties properties;
@Bean(name = "datasourceNewsRead")
@ConfigurationProperties(prefix = "spring.datasource.newsread")
@Primary
public DataSource datasource() {
return DataSourceBuilder.create().build();
}
@Bean(name = TX_MANAGER)
@Primary
public PlatformTransactionManager txManagerUser() {
return new DataSourceTransactionManager(datasource());
}
@Bean(name = DatasourceNewsReadConfig.SQL_SESSION_FACTORY_NAME)
@Primary
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(datasource());
sqlSessionFactoryBean.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
sqlSessionFactoryBean.setMapperLocations(this.properties.getMapperLocations());
return sqlSessionFactoryBean.getObject();
}
}