entityPackage();
+
+ /**
+ * mybatis xml mapper 匹配规则
+ * ? 匹配一个字符
+ * * 匹配零个或多个字符
+ * ** 匹配路径中的零或多个目录
+ * 例如:
+ * 文件路径配置为 file:D://xml/*PluginMapper.xml
+ * resources路径配置为
classpath:xml/mapper/*PluginMapper.xml
+ * 包路径配置为
package:com.plugin.xml.mapper.*PluginMapper.xml
+ * @return Set
+ */
+ Set xmlLocationsMatch();
+
+ /**
+ * 插件是否自主启用配置. 默认进行禁用, 使用主程序的配置
+ * @return 返回true, 表示进行插件自主进行Mybatis相关配置
+ */
+ default boolean enableOneselfConfig(){
+ return false;
+ }
+
+}
diff --git a/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusConfig.java b/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusConfig.java
new file mode 100644
index 00000000..0fbbfcc1
--- /dev/null
+++ b/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusConfig.java
@@ -0,0 +1,34 @@
+package cd.casic.plugin.core.register.mybatis;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+
+/**
+ * @description: TODO
+ * @author: mianbin
+ * @date: 2025/5/22 19:55
+ * @version: 1.0
+ */
+public interface MybatisPlusConfig extends MybatisCommonConfig {
+
+ /**
+ * 插件自主配置Mybatis-Plus的MybatisSqlSessionFactoryBean
+ * MybatisSqlSessionFactoryBean 具体配置说明参考 Mybatis-plus 官网
+ *
+ * @param sqlSessionFactoryBean MybatisSqlSessionFactoryBean
+ */
+ default void oneselfConfig(MybatisSqlSessionFactoryBean sqlSessionFactoryBean) {
+ }
+
+ /**
+ * 重写设置配置
+ * 只有 enableOneselfConfig 返回 false, 实现该方法才生效
+ *
+ * @param configuration 当前 MybatisConfiguration
+ * @param globalConfig 当前全局配置GlobalConfig
+ */
+ default void reSetMainConfig(MybatisConfiguration configuration, GlobalConfig globalConfig) {
+
+ }
+}
diff --git a/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusProcessor.java b/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusProcessor.java
new file mode 100644
index 00000000..92a64f72
--- /dev/null
+++ b/framework/spring-boot-starter-plugin/src/main/java/cd/casic/plugin/core/register/mybatis/MybatisPlusProcessor.java
@@ -0,0 +1,136 @@
+package cd.casic.plugin.core.register.mybatis;
+
+import cd.casic.plugin.dataobject.pojo.PluginInfo;
+import cd.casic.plugin.function.IPluginProcessor;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import lombok.extern.slf4j.Slf4j;
+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.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.io.Resource;
+import org.springframework.util.ClassUtils;
+
+import java.util.Set;
+
+/**
+ * @description: TODO
+ * @author: mianbin
+ * @date: 2025/5/22 19:59
+ * @version: 1.0
+ */
+@Slf4j
+public class MybatisPlusProcessor implements IPluginProcessor {
+ @Override
+ public void initialize() throws Exception {
+
+ }
+
+ @Override
+ public void registry(PluginInfo plugin) throws Exception {
+ MybatisPlusConfig config = getObjectByInterfaceClass(plugin.getPluginConfigObjects(), MybatisPlusConfig.class);
+ if (config == null) return;
+ final MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
+
+ if (config.enableOneselfConfig()) {
+ config.oneselfConfig(factory);
+ } else {
+ PluginFollowCoreConfig followCoreConfig = new PluginFollowCoreConfig(
+ plugin.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, plugin.getMainApplicationContext());
+ config.reSetMainConfig(mybatisPlusConfiguration, globalConfig);
+ }
+
+ PluginResourceFinder pluginResourceFinder = new PluginResourceFinder(plugin);
+
+ 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(plugin.getPluginWrapper().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(plugin, (holder, mapperClass) ->
+ mapperHandler.commonProcessMapper(holder, mapperClass, sqlSessionFactory, sqlSessionTemplate));
+ DefaultListableBeanFactory beanFactory = plugin.getPluginApplicationContext().getDefaultListableBeanFactory();
+ beanFactory.registerSingleton("sqlSessionFactory", sqlSessionFactory);
+ beanFactory.registerSingleton("sqlSession", sqlSessionTemplate);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ Resources.setDefaultClassLoader(defaultClassLoader);
+ }
+ }
+
+ @Override
+ public void unRegistry(PluginInfo plugin) throws Exception {
+ // 不做操作,直接通过关闭PluginApplicationContext完成注销。
+ }
+
+ private GlobalConfig mybatisPlusFollowCoreConfig(MybatisSqlSessionFactoryBean factory,
+ ApplicationContext mainApplicationContext) {
+ MybatisPlusProperties plusProperties = mainApplicationContext.getBean(MybatisPlusProperties.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;
+ }
+
+ // TODO 临时放这里,先跑通mybatis-plus集成测试
+ public static T getObjectByInterfaceClass(Set