diff --git a/aioj-backend-common/aioj-backend-common-core/src/main/java/cn/meowrain/aioj/backend/framework/core/enums/DelStatusEnum.java b/aioj-backend-common/aioj-backend-common-core/src/main/java/cn/meowrain/aioj/backend/framework/core/enums/DelStatusEnum.java
new file mode 100644
index 0000000..7a83d34
--- /dev/null
+++ b/aioj-backend-common/aioj-backend-common-core/src/main/java/cn/meowrain/aioj/backend/framework/core/enums/DelStatusEnum.java
@@ -0,0 +1,17 @@
+package cn.meowrain.aioj.backend.framework.core.enums;
+
+/**
+ * 删除枚举
+ */
+public enum DelStatusEnum {
+ STATUS_NORMAL("0"),
+ STATUS_DELETE("1");
+
+ private final String code;
+ DelStatusEnum(String code) {
+ this.code = code;
+ }
+ public String code() {
+ return this.code;
+ }
+}
diff --git a/aioj-backend-common/aioj-backend-common-mybatis/pom.xml b/aioj-backend-common/aioj-backend-common-mybatis/pom.xml
index 1b54eaf..65a560a 100644
--- a/aioj-backend-common/aioj-backend-common-mybatis/pom.xml
+++ b/aioj-backend-common/aioj-backend-common-mybatis/pom.xml
@@ -31,6 +31,10 @@
mybatis-plus-spring
+
+ com.baomidou
+ mybatis-plus-jsqlparser
+
com.mysql
mysql-connector-j
@@ -40,5 +44,17 @@
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
+
+
+ org.springframework.security
+ spring-security-core
+ true
+
+
+
+ cn.meowrain
+ aioj-backend-common-core
+ 1.0-SNAPSHOT
+
\ No newline at end of file
diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/MybatisPlusAutoConfiguration.java b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/MybatisPlusAutoConfiguration.java
new file mode 100644
index 0000000..b4f0aa2
--- /dev/null
+++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/MybatisPlusAutoConfiguration.java
@@ -0,0 +1,27 @@
+package cn.meowrain.backend.common.mybaits;
+
+import cn.meowrain.backend.common.mybaits.config.MybatisPlusMetaObjectHandler;
+import cn.meowrain.backend.common.mybaits.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration(proxyBeanMethods = false)
+public class MybatisPlusAutoConfiguration {
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInterceptor());
+ return interceptor;
+ }
+
+ /**
+ * 创建并返回MybatisPlusMetaObjectHandler实例,用于审计字段自动填充
+ */
+ @Bean
+ public MybatisPlusMetaObjectHandler mybatisPlusMetaObjectHandler() {
+ return new MybatisPlusMetaObjectHandler();
+ }
+
+}
diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/config/MybatisPlusMetaObjectHandler.java b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/config/MybatisPlusMetaObjectHandler.java
new file mode 100644
index 0000000..836bee6
--- /dev/null
+++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/config/MybatisPlusMetaObjectHandler.java
@@ -0,0 +1,70 @@
+package cn.meowrain.backend.common.mybaits.config;
+
+import cn.meowrain.aioj.backend.framework.core.enums.DelStatusEnum;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.util.ClassUtils;
+
+import java.time.LocalDateTime;
+import java.util.Optional;
+
+/**
+ * MybatisPlus 自动填充处理器,用于实体类字段的自动填充
+ */
+@Slf4j
+public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
+ @Override
+ public void insertFill(MetaObject metaObject) {
+ log.debug("mybatis plus start insert fill ....");
+ LocalDateTime now = LocalDateTime.now();
+
+ fillValIfNullByName("createTime", now, metaObject, true);
+ fillValIfNullByName("updateTime", now, metaObject, true);
+ fillValIfNullByName("createBy", getUserName(), metaObject, true);
+ fillValIfNullByName("updateBy", getUserName(), metaObject, true);
+
+ // 删除标记自动填充
+ fillValIfNullByName("delFlag", DelStatusEnum.STATUS_NORMAL.code(), metaObject, true);
+ }
+
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ log.debug("mybatis plus start update fill ....");
+ fillValIfNullByName("updateTime", LocalDateTime.now(), metaObject, true);
+ fillValIfNullByName("updateBy", getUserName(), metaObject, true);
+ }
+
+ private void fillValIfNullByName(String fieldName, Object fieldVal, MetaObject metaObject, boolean isCover) {
+ //如果填充值为空
+ if (fieldVal == null) {
+ return;
+ }
+ // 没有 set 方法
+ if (!metaObject.hasSetter(fieldName)) {
+ return;
+ }
+ // field 类型相同时设置
+ Class> getterType = metaObject.getGetterType(fieldName);
+ if (ClassUtils.isAssignableValue(getterType, fieldVal)) {
+ metaObject.setValue(fieldName, fieldVal);
+ }
+ }
+
+ private Object getUserName() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ // 匿名接口直接返回
+ if (authentication instanceof AnonymousAuthenticationToken) {
+ return null;
+ }
+
+ if (Optional.ofNullable(authentication).isPresent()) {
+ return authentication.getName();
+ }
+
+ return null;
+ }
+}
diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/plugins/PaginationInterceptor.java b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/plugins/PaginationInterceptor.java
new file mode 100644
index 0000000..c1150da
--- /dev/null
+++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/plugins/PaginationInterceptor.java
@@ -0,0 +1,62 @@
+package cn.meowrain.backend.common.mybaits.plugins;
+
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ParameterUtils;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+
+/**
+ * * 分页拦截器实现类,用于处理分页查询逻辑
+ * *
+ * * 当分页大小小于0时自动设置为0,防止全表查询
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class PaginationInterceptor extends PaginationInnerInterceptor {
+ /**
+ * 数据库类型
+ *
+ * 查看 {@link #findIDialect(Executor)} 逻辑
+ */
+ private DbType dbType;
+
+ /**
+ * 方言实现类
+ *
+ * 查看 {@link #findIDialect(Executor)} 逻辑
+ */
+ private IDialect dialect;
+
+
+ public PaginationInterceptor(DbType dbType) {
+ this.dbType = dbType;
+ }
+
+ public PaginationInterceptor(IDialect dialect) {
+ this.dialect = dialect;
+ }
+
+ /**
+ * 在执行查询前处理分页参数
+ */
+ @Override
+ public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
+ IPage> page = ParameterUtils.findPage(parameter).orElse(null);
+ // size 小于 0 直接设置为 0 , 即不查询任何数据
+ if (null != page && page.getSize() < 0) {
+ page.setSize(0);
+ }
+ super.beforeQuery(executor, ms, page, rowBounds, resultHandler, boundSql);
+ }
+}
diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index f1783c2..6dee158 100644
--- a/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-com.pig4cloud.pig.common.mybatis.MybatisAutoConfiguration
+cn.meowrain.backend.common.mybaits.MybatisPlusAutoConfiguration
\ No newline at end of file