/** * Copyright 2010-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mybatis.spring.annotation; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.mybatis.spring.mapper.MapperFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.context.annotation.Import; /** * Use this annotation to register MyBatis mapper interfaces when using Java * Config. It performs when same work as {@link MapperScannerConfigurer} via * {@link MapperScannerRegistrar}. * * <p>Configuration example:</p> * <pre class="code"> * @Configuration * @MapperScan("org.mybatis.spring.sample.mapper") * public class AppConfig { * * @Bean * public DataSource dataSource() { * return new EmbeddedDatabaseBuilder() * .addScript("schema.sql") * .build(); * } * * @Bean * public DataSourceTransactionManager transactionManager() { * return new DataSourceTransactionManager(dataSource()); * } * * @Bean * public SqlSessionFactory sqlSessionFactory() throws Exception { * SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); * sessionFactory.setDataSource(dataSource()); * return sessionFactory.getObject(); * } * } * </pre> * * @author Michael Lanyon * @author Eduardo Macarron * * @since 1.2.0 * @see MapperScannerRegistrar * @see MapperFactoryBean */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(MapperScannerRegistrar.class) public @interface MapperScan { /** * Alias for the {@link #basePackages()} attribute. Allows for more concise * annotation declarations e.g.: * {@code @EnableMyBatisMapperScanner("org.my.pkg")} instead of {@code * @EnableMyBatisMapperScanner(basePackages= "org.my.pkg"})}. */ String[] value() default {}; /** * Base packages to scan for MyBatis interfaces. Note that only interfaces * with at least one method will be registered; concrete classes will be * ignored. */ String[] basePackages() default {}; /** * Type-safe alternative to {@link #basePackages()} for specifying the packages * to scan for annotated components. The package of each class specified will be scanned. * <p>Consider creating a special no-op marker class or interface in each package * that serves no purpose other than being referenced by this attribute. */ Class<?>[] basePackageClasses() default {}; /** * The {@link BeanNameGenerator} class to be used for naming detected components * within the Spring container. */ Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class; /** * This property specifies the annotation that the scanner will search for. * <p> * The scanner will register all interfaces in the base package that also have * the specified annotation. * <p> * Note this can be combined with markerInterface. */ Class<? extends Annotation> annotationClass() default Annotation.class; /** * This property specifies the parent that the scanner will search for. * <p> * The scanner will register all interfaces in the base package that also have * the specified interface class as a parent. * <p> * Note this can be combined with annotationClass. */ Class<?> markerInterface() default Class.class; /** * Specifies which {@code SqlSessionTemplate} to use in the case that there is * more than one in the spring context. Usually this is only needed when you * have more than one datasource. */ String sqlSessionTemplateRef() default ""; /** * Specifies which {@code SqlSessionFactory} to use in the case that there is * more than one in the spring context. Usually this is only needed when you * have more than one datasource. */ String sqlSessionFactoryRef() default ""; /** * Specifies a custom MapperFactoryBean to return a mybatis proxy as spring bean. * */ Class<? extends MapperFactoryBean> factoryBean() default MapperFactoryBean.class; }