Skip to content

Commit 0b50897

Browse files
committed
完善 mybatis.basePackages 配置,指定该配置时不指定 @Mapper 注解
1 parent 50cfbab commit 0b50897

File tree

2 files changed

+21
-10
lines changed
  • spring-boot-starter

2 files changed

+21
-10
lines changed

spring-boot-starter/mapper-spring-boot-autoconfigure/src/main/java/tk/mybatis/mapper/autoconfigure/MapperAutoConfiguration.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package tk.mybatis.mapper.autoconfigure;
1717

1818
import java.beans.PropertyDescriptor;
19+
import java.util.Arrays;
1920
import java.util.List;
2021
import java.util.Optional;
2122
import java.util.Set;
@@ -69,8 +70,10 @@
6970
import org.springframework.util.CollectionUtils;
7071
import org.springframework.util.ObjectUtils;
7172
import org.springframework.util.StringUtils;
73+
import tk.mybatis.spring.annotation.BaseProperties;
7274
import tk.mybatis.spring.mapper.MapperFactoryBean;
7375
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
76+
import tk.mybatis.spring.mapper.SpringBootBindUtil;
7477

7578
/**
7679
* {@link EnableAutoConfiguration Auto-Configuration} for Mybatis. Contributes a {@link SqlSessionFactory} and a
@@ -249,17 +252,27 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B
249252
return;
250253
}
251254

252-
logger.debug("Searching for mappers annotated with @Mapper");
255+
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MapperScannerConfigurer.class);
253256

254-
List<String> packages = AutoConfigurationPackages.get(this.beanFactory);
255-
if (logger.isDebugEnabled()) {
256-
packages.forEach(pkg -> logger.debug("Using auto-configuration base package '{}'", pkg));
257+
BaseProperties properties = SpringBootBindUtil.bind(environment, BaseProperties.class, BaseProperties.MYBATIS_PREFIX);
258+
if (properties != null && properties.getBasePackages() != null && properties.getBasePackages().length > 0) {
259+
List<String> basePackages = Arrays.asList(properties.getBasePackages());
260+
if (logger.isDebugEnabled()) {
261+
basePackages.forEach(pkg -> logger.debug("Using mybatis.basePackages configuration package '{}'", pkg));
262+
}
263+
builder.addPropertyValue("basePackage", StringUtils.collectionToCommaDelimitedString(basePackages));
264+
} else {
265+
//设置了包名的情况下,不需要指定该注解
266+
logger.debug("Searching for mappers annotated with @Mapper");
267+
builder.addPropertyValue("annotationClass", Mapper.class);
268+
List<String> packages = AutoConfigurationPackages.get(this.beanFactory);
269+
if (logger.isDebugEnabled()) {
270+
packages.forEach(pkg -> logger.debug("Using auto-configuration base package '{}'", pkg));
271+
}
272+
builder.addPropertyValue("basePackage", StringUtils.collectionToCommaDelimitedString(packages));
257273
}
258274

259-
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MapperScannerConfigurer.class);
260275
builder.addPropertyValue("processPropertyPlaceHolders", true);
261-
builder.addPropertyValue("annotationClass", Mapper.class);
262-
builder.addPropertyValue("basePackage", StringUtils.collectionToCommaDelimitedString(packages));
263276
builder.addPropertyValue("mapperProperties", this.environment);
264277
BeanWrapper beanWrapper = new BeanWrapperImpl(MapperScannerConfigurer.class);
265278
Set<String> propertyNames = Stream.of(beanWrapper.getPropertyDescriptors()).map(PropertyDescriptor::getName)

spring-boot-starter/mapper-spring-boot-samples/mapper-spring-boot-sample-xml/src/main/resources/application.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,10 @@ spring:
2828
mybatis:
2929
config-location: mybatis-config.xml
3030
base-packages: tk.mybatis.sample.mapper
31-
mapper-locations:
32-
- classpath: /tk/mybatis/sample/mapper
3331

3432
logging:
3533
level:
36-
root: WARN
34+
root: DEBUG
3735
tk.mybatis.sample.mapper: TRACE
3836
mapper:
3937
not-empty: true

0 commit comments

Comments
 (0)