mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
solon-plugin
This commit is contained in:
parent
63e5c3787e
commit
e021c8281b
53
mybatis-plus-join-solon-plugin/pom.xml
Normal file
53
mybatis-plus-join-solon-plugin/pom.xml
Normal file
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join-root</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>mybatis-plus-join-solon-plugin</artifactId>
|
||||
|
||||
<properties>
|
||||
<solon.varrsion>2.6.3</solon.varrsion>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join-extension</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-core</artifactId>
|
||||
<version>${mpj.mybatis.plus.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon</artifactId>
|
||||
<version>${solon.varrsion}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>mybatis-solon-plugin</artifactId>
|
||||
<version>${solon.varrsion}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>mybatis-plus-solon-plugin</artifactId>
|
||||
<version>${solon.varrsion}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,91 @@
|
||||
package com.github.yulichang.mybatisplusjoin.solon.plugin;
|
||||
|
||||
import com.baomidou.mybatisplus.core.config.GlobalConfig;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
|
||||
import com.github.yulichang.config.ConfigProperties;
|
||||
import com.github.yulichang.config.MPJInterceptorConfig;
|
||||
import com.github.yulichang.config.enums.IfAbsentEnum;
|
||||
import com.github.yulichang.config.enums.LogicDelTypeEnum;
|
||||
import com.github.yulichang.extension.mapping.config.MappingConfig;
|
||||
import com.github.yulichang.injector.MPJSqlInjector;
|
||||
import com.github.yulichang.toolkit.SpringContentUtils;
|
||||
import com.github.yulichang.toolkit.reflect.GenericTypeUtils;
|
||||
import com.github.yulichang.wrapper.enums.IfAbsentSqlKeyWordEnum;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.apache.ibatis.solon.MybatisAdapter;
|
||||
import org.apache.ibatis.solon.integration.MybatisAdapterManager;
|
||||
import org.noear.solon.core.AppContext;
|
||||
import org.noear.solon.core.Plugin;
|
||||
import org.noear.solon.core.Props;
|
||||
import org.noear.solon.core.event.AppLoadEndEvent;
|
||||
import org.noear.solon.core.util.GenericUtil;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class XPluginImpl implements Plugin {
|
||||
|
||||
@Override
|
||||
public void start(AppContext context) throws Throwable {
|
||||
/* 设置 MPJSqlInjector
|
||||
反射修改GlobalConfigUtils.GLOBAL_CONFIG属性
|
||||
修改final修饰的变量会出现警告
|
||||
使用solon方式配置不生效采用的“曲线救国”方式
|
||||
issue https://gitee.com/noear/solon/issues/I8SJ0Z */
|
||||
Field field = GlobalConfigUtils.class.getDeclaredField("GLOBAL_CONFIG");
|
||||
field.setAccessible(true);
|
||||
Field modifier = Field.class.getDeclaredField("modifiers");
|
||||
modifier.setAccessible(true);
|
||||
modifier.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||
field.set(null, new ConcurrentHashMap<String, GlobalConfig>() {
|
||||
@Override
|
||||
@SuppressWarnings("NullableProblems")
|
||||
public GlobalConfig putIfAbsent(String key, GlobalConfig value) {
|
||||
value.setSqlInjector(new MPJSqlInjector());
|
||||
return super.putIfAbsent(key, value);
|
||||
}
|
||||
});
|
||||
GenericTypeUtils.setGenericTypeResolver(GenericUtil::resolveTypeArguments);
|
||||
// SpringContext兼容
|
||||
SpringContentUtils.setSpringContext(new SpringContentUtils.SpringContext() {
|
||||
@Override
|
||||
public <T> T getBean(Class<T> clazz) {
|
||||
return context.getBean(clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Map<String, T> getBeansOfType(Class<T> clazz) {
|
||||
return context.getBeansMapOfType(clazz);
|
||||
}
|
||||
});
|
||||
// 读取配置
|
||||
Props prop = context.cfg().getProp("mybatis-plus-join");
|
||||
ConfigProperties.banner = prop.getBool("banner", ConfigProperties.banner);
|
||||
ConfigProperties.subTableLogic = prop.getBool("subTableLogic", ConfigProperties.subTableLogic);
|
||||
ConfigProperties.msCache = prop.getBool("msCache", ConfigProperties.msCache);
|
||||
ConfigProperties.tableAlias = prop.get("tableAlias", ConfigProperties.tableAlias);
|
||||
ConfigProperties.joinPrefix = prop.get("joinPrefix", ConfigProperties.joinPrefix);
|
||||
ConfigProperties.logicDelType = prop.getOrDefault("logicDelType", ConfigProperties.logicDelType, val ->
|
||||
Arrays.stream(LogicDelTypeEnum.values()).filter(e -> e.name().equalsIgnoreCase(val)).findFirst()
|
||||
.orElseThrow(() -> ExceptionUtils.mpe("mybatis-plus-join.logicDelType 配置错误")));
|
||||
ConfigProperties.mappingMaxCount = prop.getInt("mappingMaxCount", ConfigProperties.mappingMaxCount);
|
||||
ConfigProperties.ifAbsent = prop.getOrDefault("ifAbsent", ConfigProperties.ifAbsent, val ->
|
||||
Arrays.stream(IfAbsentEnum.values()).filter(e -> e.name().equalsIgnoreCase(val)).findFirst()
|
||||
.map(m -> (BiPredicate<Object, IfAbsentSqlKeyWordEnum>) (o, ifAbsentSqlKeyWordEnum) -> m.test(o))
|
||||
.orElseThrow(() -> ExceptionUtils.mpe("mybatis-plus-join.ifAbsent 配置错误")));
|
||||
// 后续操作
|
||||
context.onEvent(AppLoadEndEvent.class, e -> {
|
||||
List<SqlSessionFactory> sqlSessionFactoryList = MybatisAdapterManager.getAll().values().stream()
|
||||
.map(MybatisAdapter::getFactory).collect(Collectors.toList());
|
||||
new MPJInterceptorConfig(sqlSessionFactoryList, false);
|
||||
MappingConfig.init();
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
# suppress inspection "UnusedProperty" for whole file
|
||||
solon.plugin=com.github.yulichang.mybatisplusjoin.solon.plugin.XPluginImpl
|
||||
solon.plugin.priority=3
|
Loading…
x
Reference in New Issue
Block a user