![JAR search and dependency download from the Maven repository](/logo.png)
org.zodiac.mybatisplus.extension.MyBatisPlusProcessor Maven / Gradle / Ivy
package org.zodiac.mybatisplus.extension;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.zodiac.plugin.factory.PluginRegistryInfo;
import org.zodiac.sdk.toolkit.util.lang.ObjUtil;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.scripting.LanguageDriver;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.Resource;
import org.zodiac.mybatis.extension.AbstractMyBatisProcessor;
import org.zodiac.mybatis.extension.CommonRegister;
import org.zodiac.mybatis.extension.MapperHandler;
import org.zodiac.mybatis.extension.PluginResourceFinder;
import org.zodiac.mybatisplus.config.MyBatisPlusConfigInfo;
/**
* springboot-mybatis plus 处理者。
*
*/
public class MyBatisPlusProcessor extends AbstractMyBatisProcessor {
private MyBatisPlusPluginFollowCoreConfig myBatisPlusPluginFollowCoreConfig;
public MyBatisPlusProcessor() {}
public MyBatisPlusProcessor(MyBatisPlusPluginFollowCoreConfig myBatisPlusPluginFollowCoreConfig) {
this.myBatisPlusPluginFollowCoreConfig = myBatisPlusPluginFollowCoreConfig;
}
@Override
public String key() {
return "MybatisPlusProcessor";
}
@Override
public void registry(PluginRegistryInfo pluginRegistryInfo) throws Exception {
SpringBootMybatisPlusConfig config = ObjUtil.getObjectByInterfaceClass(
pluginRegistryInfo.getConfigSingletons(), SpringBootMybatisPlusConfig.class);
if (config == null) {
return;
}
final MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
if (config.enableOneselfConfig()) {
config.oneselfConfig(factory);
} else {
MyBatisPlusPluginFollowCoreConfig followCoreConfig = null != myBatisPlusPluginFollowCoreConfig ?
myBatisPlusPluginFollowCoreConfig : new MyBatisPlusPluginFollowCoreConfig(pluginRegistryInfo.getMainApplicationContext());
MybatisConfiguration mybatisPlusConfiguration = followCoreConfig.getMybatisPlusConfiguration();
factory.setDataSource(followCoreConfig.getDataSource());
factory.setConfiguration(mybatisPlusConfiguration);
Interceptor[] interceptor = followCoreConfig.getInterceptor();
if (interceptor != null && interceptor.length > 0) {
factory.setPlugins(interceptor);
}
DatabaseIdProvider databaseIdProvider = followCoreConfig.getDatabaseIdProvider();
if (databaseIdProvider != null) {
factory.setDatabaseIdProvider(databaseIdProvider);
}
LanguageDriver[] languageDriver = followCoreConfig.getLanguageDriver();
if (languageDriver != null) {
factory.setScriptingLanguageDrivers(languageDriver);
}
/*配置mybatis-plus私有的配置*/
GlobalConfig globalConfig =
mybatisPlusFollowCoreConfig(factory, pluginRegistryInfo.getMainApplicationContext());
config.reSetMainConfig(mybatisPlusConfiguration, globalConfig);
}
PluginResourceFinder pluginResourceFinder = new PluginResourceFinder(pluginRegistryInfo);
Class>[] aliasesClasses = pluginResourceFinder.getAliasesClasses(config.entityPackage());
if (aliasesClasses != null && aliasesClasses.length > 0) {
factory.setTypeAliases(aliasesClasses);
}
Resource[] xmlResource = pluginResourceFinder.getXmlResource(config.xmlLocationsMatch());
if (xmlResource != null && xmlResource.length > 0) {
factory.setMapperLocations(xmlResource);
}
ClassLoader defaultClassLoader = Resources.getDefaultClassLoader();
try {
Resources.setDefaultClassLoader(pluginRegistryInfo.getPluginClassLoader());
SqlSessionFactory sqlSessionFactory = factory.getObject();
if (sqlSessionFactory == null) {
throw new Exception("Get mybatis-plus sqlSessionFactory is null");
}
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
MapperHandler mapperHandler = new MapperHandler();
mapperHandler.processMapper(pluginRegistryInfo, (holder, mapperClass) -> {
mapperHandler.commonProcessMapper(holder, mapperClass, sqlSessionFactory, sqlSessionTemplate);
});
CommonRegister.commonRegister(pluginRegistryInfo, sqlSessionFactory, sqlSessionTemplate);
} finally {
Resources.setDefaultClassLoader(defaultClassLoader);
}
}
private GlobalConfig mybatisPlusFollowCoreConfig(MybatisSqlSessionFactoryBean factory,
GenericApplicationContext mainApplicationContext) {
MyBatisPlusConfigInfo plusProperties = mainApplicationContext.getBean(MyBatisPlusConfigInfo.class);
GlobalConfig currentGlobalConfig = new GlobalConfig();
currentGlobalConfig.setBanner(false);
GlobalConfig globalConfig = plusProperties.getGlobalConfig();
if (globalConfig != null) {
currentGlobalConfig.setDbConfig(globalConfig.getDbConfig());
// currentGlobalConfig.setIdentifierGenerator(globalConfig.getIdentifierGenerator());
currentGlobalConfig.setMetaObjectHandler(globalConfig.getMetaObjectHandler());
currentGlobalConfig.setSqlInjector(globalConfig.getSqlInjector());
}
factory.setGlobalConfig(currentGlobalConfig);
return currentGlobalConfig;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy