Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
loit-shardingsphere-seata-example
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
loit-Infrastructure-example
loit-shardingsphere-seata-example
Commits
311582cc
提交
311582cc
authored
2月 12, 2020
作者:
陈世营
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update mybatis config
上级
83239b27
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
167 行增加
和
116 行删除
+167
-116
MybatisPlusAutoConfig.java
...it/shardingsphere/seata/config/MybatisPlusAutoConfig.java
+167
-116
没有找到文件。
loit-shardingsphere-seata-main/src/main/java/com/loit/shardingsphere/seata/config/MybatisPlusAutoConfig.java
浏览文件 @
311582cc
...
@@ -3,11 +3,13 @@ package com.loit.shardingsphere.seata.config;
...
@@ -3,11 +3,13 @@ package com.loit.shardingsphere.seata.config;
import
com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer
;
import
com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer
;
import
com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties
;
import
com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties
;
import
com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer
;
import
com.baomidou.mybatisplus.autoconfigure.SpringBootVFS
;
import
com.baomidou.mybatisplus.autoconfigure.SpringBootVFS
;
import
com.baomidou.mybatisplus.core.MybatisConfiguration
;
import
com.baomidou.mybatisplus.core.MybatisConfiguration
;
import
com.baomidou.mybatisplus.core.
MybatisXMLLanguageDriver
;
import
com.baomidou.mybatisplus.core.
config.GlobalConfig
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
com.baomidou.mybatisplus.core.incrementer.IKeyGenerator
;
import
com.baomidou.mybatisplus.core.incrementer.IKeyGenerator
;
import
com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator
;
import
com.baomidou.mybatisplus.core.injector.ISqlInjector
;
import
com.baomidou.mybatisplus.core.injector.ISqlInjector
;
import
com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean
;
import
com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
...
@@ -15,22 +17,26 @@ import org.apache.ibatis.logging.Log;
...
@@ -15,22 +17,26 @@ import org.apache.ibatis.logging.Log;
import
org.apache.ibatis.logging.LogFactory
;
import
org.apache.ibatis.logging.LogFactory
;
import
org.apache.ibatis.mapping.DatabaseIdProvider
;
import
org.apache.ibatis.mapping.DatabaseIdProvider
;
import
org.apache.ibatis.plugin.Interceptor
;
import
org.apache.ibatis.plugin.Interceptor
;
import
org.apache.ibatis.scripting.LanguageDriver
;
import
org.apache.ibatis.session.ExecutorType
;
import
org.apache.ibatis.session.ExecutorType
;
import
org.apache.ibatis.session.SqlSessionFactory
;
import
org.apache.ibatis.session.SqlSessionFactory
;
import
org.apache.ibatis.type.TypeHandler
;
import
org.mybatis.spring.SqlSessionTemplate
;
import
org.mybatis.spring.SqlSessionTemplate
;
import
org.mybatis.spring.mapper.ClassPathMapperScanner
;
import
org.mybatis.spring.mapper.MapperFactoryBean
;
import
org.mybatis.spring.mapper.MapperFactoryBean
;
import
org.springframework.beans.BeansException
;
import
org.mybatis.spring.mapper.MapperScannerConfigurer
;
import
org.springframework.beans.BeanWrapper
;
import
org.springframework.beans.BeanWrapperImpl
;
import
org.springframework.beans.factory.BeanFactory
;
import
org.springframework.beans.factory.BeanFactory
;
import
org.springframework.beans.factory.BeanFactoryAware
;
import
org.springframework.beans.factory.BeanFactoryAware
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.beans.factory.support.BeanDefinitionBuilder
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.boot.autoconfigure.AutoConfigurationPackages
;
import
org.springframework.boot.autoconfigure.AutoConfigurationPackages
;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ResourceLoaderAware
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.context.annotation.Import
;
...
@@ -43,187 +49,232 @@ import org.springframework.util.CollectionUtils;
...
@@ -43,187 +49,232 @@ import org.springframework.util.CollectionUtils;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.PostConstruct
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.function.Consumer
;
import
java.util.stream.Stream
;
@Configuration
@Configuration
@AutoConfigureAfter
(
MybatisPlusConfig
.
class
)
@AutoConfigureAfter
(
MybatisPlusConfig
.
class
)
@EnableConfigurationProperties
({
MybatisPlusProperties
.
class
})
@EnableConfigurationProperties
({
MybatisPlusProperties
.
class
})
public
class
MybatisPlusAutoConfig
{
public
class
MybatisPlusAutoConfig
implements
InitializingBean
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
MybatisPlusAutoConfig
.
class
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
MybatisPlusAutoConfig
.
class
);
private
MybatisPlusProperties
properties
;
private
MybatisPlusProperties
properties
;
private
Interceptor
[]
interceptors
;
private
ResourceLoader
resourceLoader
;
private
Interceptor
[]
interceptors
;
private
DatabaseIdProvider
databaseIdProvider
;
private
List
<
ConfigurationCustomizer
>
configurationCustomizers
;
private
TypeHandler
[]
typeHandlers
;
private
ApplicationContext
applicationContext
;
private
LanguageDriver
[]
languageDrivers
;
public
MybatisPlusAutoConfig
(
MybatisPlusProperties
properties
,
ObjectProvider
<
Interceptor
[]>
interceptorsProvider
,
ResourceLoader
resourceLoader
,
ObjectProvider
<
DatabaseIdProvider
>
databaseIdProvider
,
ObjectProvider
<
List
<
ConfigurationCustomizer
>>
configurationCustomizersProvider
,
ApplicationContext
applicationContext
)
{
private
ResourceLoader
resourceLoader
;
private
DatabaseIdProvider
databaseIdProvider
;
private
List
<
ConfigurationCustomizer
>
configurationCustomizers
;
private
List
<
MybatisPlusPropertiesCustomizer
>
mybatisPlusPropertiesCustomizers
;
private
final
ApplicationContext
applicationContext
;
public
MybatisPlusAutoConfig
(
MybatisPlusProperties
properties
,
ObjectProvider
<
Interceptor
[]>
interceptorsProvider
,
ObjectProvider
<
TypeHandler
[]>
typeHandlersProvider
,
ObjectProvider
<
LanguageDriver
[]>
languageDriversProvider
,
ResourceLoader
resourceLoader
,
ObjectProvider
<
DatabaseIdProvider
>
databaseIdProvider
,
ObjectProvider
<
List
<
ConfigurationCustomizer
>>
configurationCustomizersProvider
,
ObjectProvider
<
List
<
MybatisPlusPropertiesCustomizer
>>
mybatisPlusPropertiesCustomizerProvider
,
ApplicationContext
applicationContext
)
{
this
.
properties
=
properties
;
this
.
properties
=
properties
;
this
.
interceptors
=
(
Interceptor
[])
interceptorsProvider
.
getIfAvailable
();
this
.
interceptors
=
interceptorsProvider
.
getIfAvailable
();
this
.
typeHandlers
=
typeHandlersProvider
.
getIfAvailable
();
this
.
languageDrivers
=
languageDriversProvider
.
getIfAvailable
();
this
.
resourceLoader
=
resourceLoader
;
this
.
resourceLoader
=
resourceLoader
;
this
.
databaseIdProvider
=
(
DatabaseIdProvider
)
databaseIdProvider
.
getIfAvailable
();
this
.
databaseIdProvider
=
databaseIdProvider
.
getIfAvailable
();
this
.
configurationCustomizers
=
(
List
)
configurationCustomizersProvider
.
getIfAvailable
();
this
.
configurationCustomizers
=
configurationCustomizersProvider
.
getIfAvailable
();
this
.
mybatisPlusPropertiesCustomizers
=
mybatisPlusPropertiesCustomizerProvider
.
getIfAvailable
();
this
.
applicationContext
=
applicationContext
;
this
.
applicationContext
=
applicationContext
;
}
}
@PostConstruct
@Override
public
void
checkConfigFileExists
()
{
public
void
afterPropertiesSet
()
{
if
(!
CollectionUtils
.
isEmpty
(
mybatisPlusPropertiesCustomizers
))
{
mybatisPlusPropertiesCustomizers
.
forEach
(
i
->
i
.
customize
(
properties
));
}
checkConfigFileExists
();
}
private
void
checkConfigFileExists
()
{
if
(
this
.
properties
.
isCheckConfigLocation
()
&&
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
if
(
this
.
properties
.
isCheckConfigLocation
()
&&
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
Resource
resource
=
this
.
resourceLoader
.
getResource
(
this
.
properties
.
getConfigLocation
());
Resource
resource
=
this
.
resourceLoader
.
getResource
(
this
.
properties
.
getConfigLocation
());
Assert
.
state
(
resource
.
exists
(),
"Cannot find config location: "
+
resource
+
" (please add config file or check your Mybatis configuration)"
);
Assert
.
state
(
resource
.
exists
(),
"Cannot find config location: "
+
resource
+
" (please add config file or check your Mybatis configuration)"
);
}
}
}
}
@SuppressWarnings
(
"SpringJavaInjectionPointsAutowiringInspection"
)
@Bean
@Bean
@ConditionalOnMissingBean
@ConditionalOnMissingBean
public
SqlSessionFactory
sqlSessionFactory
(
DataSource
dataSource
)
throws
Exception
{
public
SqlSessionFactory
sqlSessionFactory
(
DataSource
dataSource
)
throws
Exception
{
// TODO 使用 MybatisSqlSessionFactoryBean 而不是 SqlSessionFactoryBean
MybatisSqlSessionFactoryBean
factory
=
new
MybatisSqlSessionFactoryBean
();
MybatisSqlSessionFactoryBean
factory
=
new
MybatisSqlSessionFactoryBean
();
factory
.
setDataSource
(
dataSource
);
factory
.
setDataSource
(
dataSource
);
factory
.
setVfs
(
SpringBootVFS
.
class
);
factory
.
setVfs
(
SpringBootVFS
.
class
);
if
(
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
if
(
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
factory
.
setConfigLocation
(
this
.
resourceLoader
.
getResource
(
this
.
properties
.
getConfigLocation
()));
factory
.
setConfigLocation
(
this
.
resourceLoader
.
getResource
(
this
.
properties
.
getConfigLocation
()));
}
}
applyConfiguration
(
factory
);
MybatisConfiguration
configuration
=
this
.
properties
.
getConfiguration
();
if
(
configuration
==
null
&&
!
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
configuration
=
new
MybatisConfiguration
();
}
if
(
configuration
!=
null
&&
!
CollectionUtils
.
isEmpty
(
this
.
configurationCustomizers
))
{
Iterator
i
$
=
this
.
configurationCustomizers
.
iterator
();
while
(
i
$
.
hasNext
())
{
ConfigurationCustomizer
customizer
=
(
ConfigurationCustomizer
)
i
$
.
next
();
customizer
.
customize
(
configuration
);
}
}
if
(
null
!=
configuration
)
{
configuration
.
setDefaultScriptingLanguage
(
MybatisXMLLanguageDriver
.
class
);
}
factory
.
setConfiguration
(
configuration
);
if
(
this
.
properties
.
getConfigurationProperties
()
!=
null
)
{
if
(
this
.
properties
.
getConfigurationProperties
()
!=
null
)
{
factory
.
setConfigurationProperties
(
this
.
properties
.
getConfigurationProperties
());
factory
.
setConfigurationProperties
(
this
.
properties
.
getConfigurationProperties
());
}
}
if
(!
ObjectUtils
.
isEmpty
(
this
.
interceptors
))
{
if
(!
ObjectUtils
.
isEmpty
(
this
.
interceptors
))
{
factory
.
setPlugins
(
this
.
interceptors
);
factory
.
setPlugins
(
this
.
interceptors
);
}
}
if
(
this
.
databaseIdProvider
!=
null
)
{
if
(
this
.
databaseIdProvider
!=
null
)
{
factory
.
setDatabaseIdProvider
(
this
.
databaseIdProvider
);
factory
.
setDatabaseIdProvider
(
this
.
databaseIdProvider
);
}
}
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeAliasesPackage
()))
{
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeAliasesPackage
()))
{
factory
.
setTypeAliasesPackage
(
this
.
properties
.
getTypeAliasesPackage
());
factory
.
setTypeAliasesPackage
(
this
.
properties
.
getTypeAliasesPackage
());
}
}
if
(
this
.
properties
.
getTypeAliasesSuperType
()
!=
null
)
{
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeEnumsPackage
()))
{
factory
.
setTypeAliasesSuperType
(
this
.
properties
.
getTypeAliasesSuperType
());
factory
.
setTypeEnumsPackage
(
this
.
properties
.
getTypeEnumsPackage
());
}
}
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeHandlersPackage
()))
{
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeHandlersPackage
()))
{
factory
.
setTypeHandlersPackage
(
this
.
properties
.
getTypeHandlersPackage
());
factory
.
setTypeHandlersPackage
(
this
.
properties
.
getTypeHandlersPackage
());
}
}
if
(!
ObjectUtils
.
isEmpty
(
this
.
typeHandlers
))
{
factory
.
setTypeHandlers
(
this
.
typeHandlers
);
}
if
(!
ObjectUtils
.
isEmpty
(
this
.
properties
.
resolveMapperLocations
()))
{
if
(!
ObjectUtils
.
isEmpty
(
this
.
properties
.
resolveMapperLocations
()))
{
factory
.
setMapperLocations
(
this
.
properties
.
resolveMapperLocations
());
factory
.
setMapperLocations
(
this
.
properties
.
resolveMapperLocations
());
}
}
// GlobalConfiguration globalConfig;
// TODO 对源码做了一定的修改(因为源码适配了老旧的mybatis版本,但我们不需要适配)
// if (!ObjectUtils.isEmpty(this.properties.getGlobalConfig())) {
Class
<?
extends
LanguageDriver
>
defaultLanguageDriver
=
this
.
properties
.
getDefaultScriptingLanguageDriver
();
// globalConfig = this.properties.getGlobalConfig().convertGlobalConfiguration();
if
(!
ObjectUtils
.
isEmpty
(
this
.
languageDrivers
))
{
// } else {
factory
.
setScriptingLanguageDrivers
(
this
.
languageDrivers
);
// globalConfig = new GlobalConfiguration();
}
// }
Optional
.
ofNullable
(
defaultLanguageDriver
).
ifPresent
(
factory:
:
setDefaultScriptingLanguageDriver
);
//
// if (this.applicationContext.getBeanNamesForType(MetaObjectHandler.class, false, false).length > 0) {
// MetaObjectHandler metaObjectHandler = (MetaObjectHandler)this.applicationContext.getBean(MetaObjectHandler.class);
// globalConfig.setMetaObjectHandler(metaObjectHandler);
// }
//
// if (this.applicationContext.getBeanNamesForType(IKeyGenerator.class, false, false).length > 0) {
// IKeyGenerator keyGenerator = (IKeyGenerator)this.applicationContext.getBean(IKeyGenerator.class);
// globalConfig.setKeyGenerator(keyGenerator);
// }
//
// if (this.applicationContext.getBeanNamesForType(ISqlInjector.class, false, false).length > 0) {
// ISqlInjector iSqlInjector = (ISqlInjector)this.applicationContext.getBean(ISqlInjector.class);
// globalConfig.setSqlInjector(iSqlInjector);
// }
//
// factory.setGlobalConfig(globalConfig);
// TODO 自定义枚举包
if
(
StringUtils
.
hasLength
(
this
.
properties
.
getTypeEnumsPackage
()))
{
factory
.
setTypeEnumsPackage
(
this
.
properties
.
getTypeEnumsPackage
());
}
// TODO 此处必为非 NULL
GlobalConfig
globalConfig
=
this
.
properties
.
getGlobalConfig
();
// TODO 注入填充器
this
.
getBeanThen
(
MetaObjectHandler
.
class
,
globalConfig:
:
setMetaObjectHandler
);
// TODO 注入主键生成器
this
.
getBeanThen
(
IKeyGenerator
.
class
,
i
->
globalConfig
.
getDbConfig
().
setKeyGenerator
(
i
));
// TODO 注入sql注入器
this
.
getBeanThen
(
ISqlInjector
.
class
,
globalConfig:
:
setSqlInjector
);
// TODO 注入ID生成器
this
.
getBeanThen
(
IdentifierGenerator
.
class
,
globalConfig:
:
setIdentifierGenerator
);
// TODO 设置 GlobalConfig 到 MybatisSqlSessionFactoryBean
factory
.
setGlobalConfig
(
globalConfig
);
return
factory
.
getObject
();
return
factory
.
getObject
();
}
}
/**
* 检查spring容器里是否有对应的bean,有则进行消费
*
* @param clazz class
* @param consumer 消费
* @param <T> 泛型
*/
private
<
T
>
void
getBeanThen
(
Class
<
T
>
clazz
,
Consumer
<
T
>
consumer
)
{
if
(
this
.
applicationContext
.
getBeanNamesForType
(
clazz
,
false
,
false
).
length
>
0
)
{
consumer
.
accept
(
this
.
applicationContext
.
getBean
(
clazz
));
}
}
// TODO 入参使用 MybatisSqlSessionFactoryBean
private
void
applyConfiguration
(
MybatisSqlSessionFactoryBean
factory
)
{
// TODO 使用 MybatisConfiguration
MybatisConfiguration
configuration
=
this
.
properties
.
getConfiguration
();
if
(
configuration
==
null
&&
!
StringUtils
.
hasText
(
this
.
properties
.
getConfigLocation
()))
{
configuration
=
new
MybatisConfiguration
();
}
if
(
configuration
!=
null
&&
!
CollectionUtils
.
isEmpty
(
this
.
configurationCustomizers
))
{
for
(
ConfigurationCustomizer
customizer
:
this
.
configurationCustomizers
)
{
customizer
.
customize
(
configuration
);
}
}
factory
.
setConfiguration
(
configuration
);
}
@Bean
@Bean
@ConditionalOnMissingBean
@ConditionalOnMissingBean
public
SqlSessionTemplate
sqlSessionTemplate
(
SqlSessionFactory
sqlSessionFactory
)
{
public
SqlSessionTemplate
sqlSessionTemplate
(
SqlSessionFactory
sqlSessionFactory
)
{
ExecutorType
executorType
=
this
.
properties
.
getExecutorType
();
ExecutorType
executorType
=
this
.
properties
.
getExecutorType
();
return
executorType
!=
null
?
new
SqlSessionTemplate
(
sqlSessionFactory
,
executorType
)
:
new
SqlSessionTemplate
(
sqlSessionFactory
);
if
(
executorType
!=
null
)
{
return
new
SqlSessionTemplate
(
sqlSessionFactory
,
executorType
);
}
else
{
return
new
SqlSessionTemplate
(
sqlSessionFactory
);
}
}
}
@Configuration
@Import
({
MybatisPlusAutoConfig
.
AutoConfiguredMapperScannerRegistrar
.
class
})
@ConditionalOnMissingBean
({
MapperFactoryBean
.
class
})
public
static
class
MapperScannerRegistrarNotFoundConfiguration
{
public
MapperScannerRegistrarNotFoundConfiguration
()
{
}
@PostConstruct
/**
public
void
afterPropertiesSet
()
{
* This will just scan the same base package as Spring Boot does. If you want more power, you can explicitly use
MybatisPlusAutoConfig
.
logger
.
debug
(
"No "
+
MapperFactoryBean
.
class
.
getName
()
+
" found."
);
* {@link org.mybatis.spring.annotation.MapperScan} but this will get typed mappers working correctly, out-of-the-box,
}
* similar to using Spring Data JPA repositories.
}
*/
public
static
class
AutoConfiguredMapperScannerRegistrar
implements
BeanFactoryAware
,
ImportBeanDefinitionRegistrar
{
public
static
class
AutoConfiguredMapperScannerRegistrar
implements
BeanFactoryAware
,
ImportBeanDefinitionRegistrar
,
ResourceLoaderAware
{
private
BeanFactory
beanFactory
;
private
BeanFactory
beanFactory
;
private
ResourceLoader
resourceLoader
;
public
AutoConfiguredMapperScannerRegistrar
()
{
}
@Override
public
void
registerBeanDefinitions
(
AnnotationMetadata
importingClassMetadata
,
BeanDefinitionRegistry
registry
)
{
public
void
registerBeanDefinitions
(
AnnotationMetadata
importingClassMetadata
,
BeanDefinitionRegistry
registry
)
{
MybatisPlusAutoConfig
.
logger
.
debug
(
"Searching for mappers annotated with @Mapper"
);
ClassPathMapperScanner
scanner
=
new
ClassPathMapperScanner
(
registry
);
if
(!
AutoConfigurationPackages
.
has
(
this
.
beanFactory
))
{
logger
.
debug
(
"Could not determine auto-configuration package, automatic mapper scanning disabled."
);
try
{
return
;
if
(
this
.
resourceLoader
!=
null
)
{
scanner
.
setResourceLoader
(
this
.
resourceLoader
);
}
List
<
String
>
packages
=
AutoConfigurationPackages
.
get
(
this
.
beanFactory
);
if
(
MybatisPlusAutoConfig
.
logger
.
isDebugEnabled
())
{
Iterator
i
$
=
packages
.
iterator
();
while
(
i
$
.
hasNext
())
{
String
pkg
=
(
String
)
i
$
.
next
();
MybatisPlusAutoConfig
.
logger
.
debug
(
"Using auto-configuration base package '"
+
pkg
+
"'"
);
}
}
scanner
.
setAnnotationClass
(
Mapper
.
class
);
scanner
.
registerFilters
();
scanner
.
doScan
(
StringUtils
.
toStringArray
(
packages
));
}
catch
(
IllegalStateException
var7
)
{
MybatisPlusAutoConfig
.
logger
.
debug
(
"Could not determine auto-configuration package, automatic mapper scanning disabled."
+
var7
);
}
}
logger
.
debug
(
"Searching for mappers annotated with @Mapper"
);
List
<
String
>
packages
=
AutoConfigurationPackages
.
get
(
this
.
beanFactory
);
if
(
logger
.
isDebugEnabled
())
{
packages
.
forEach
(
pkg
->
logger
.
debug
(
"Using auto-configuration base package '"
+
pkg
+
"'"
));
}
BeanDefinitionBuilder
builder
=
BeanDefinitionBuilder
.
genericBeanDefinition
(
MapperScannerConfigurer
.
class
);
builder
.
addPropertyValue
(
"processPropertyPlaceHolders"
,
true
);
builder
.
addPropertyValue
(
"annotationClass"
,
Mapper
.
class
);
builder
.
addPropertyValue
(
"basePackage"
,
StringUtils
.
collectionToCommaDelimitedString
(
packages
));
BeanWrapper
beanWrapper
=
new
BeanWrapperImpl
(
MapperScannerConfigurer
.
class
);
Stream
.
of
(
beanWrapper
.
getPropertyDescriptors
())
// Need to mybatis-spring 2.0.2+
.
filter
(
x
->
x
.
getName
().
equals
(
"lazyInitialization"
)).
findAny
()
.
ifPresent
(
x
->
builder
.
addPropertyValue
(
"lazyInitialization"
,
"${mybatis.lazy-initialization:false}"
));
registry
.
registerBeanDefinition
(
MapperScannerConfigurer
.
class
.
getName
(),
builder
.
getBeanDefinition
());
}
}
public
void
setBeanFactory
(
BeanFactory
beanFactory
)
throws
BeansException
{
@Override
public
void
setBeanFactory
(
BeanFactory
beanFactory
)
{
this
.
beanFactory
=
beanFactory
;
this
.
beanFactory
=
beanFactory
;
}
}
}
public
void
setResourceLoader
(
ResourceLoader
resourceLoader
)
{
/**
this
.
resourceLoader
=
resourceLoader
;
* If mapper registering configuration or mapper scanning configuration not present, this configuration allow to scan
* mappers based on the same component-scanning path as Spring Boot itself.
*/
@Configuration
@Import
(
AutoConfiguredMapperScannerRegistrar
.
class
)
@ConditionalOnMissingBean
({
MapperFactoryBean
.
class
,
MapperScannerConfigurer
.
class
})
public
static
class
MapperScannerRegistrarNotFoundConfiguration
implements
InitializingBean
{
@Override
public
void
afterPropertiesSet
()
{
logger
.
debug
(
"Not found configuration for registering mapper bean using @MapperScan, MapperFactoryBean and MapperScannerConfigurer."
);
}
}
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论