From 14342e8929f0825ba7599f78acc5af870714d3eb Mon Sep 17 00:00:00 2001 From: dhb52 Date: Sun, 16 Jun 2024 23:36:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.1.0-beta1):=20mp=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A1=AB=E5=85=85createDt,updateDt=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SnailJobTemplateAutoConfiguration.java | 20 +++++-- .../handler/InjectionMetaObjectHandler.java | 52 +++++++++++++++++++ .../datasource/persistence/po/CreateDt.java | 23 ++++++++ .../persistence/po/CreateUpdateDt.java | 18 +++++++ 4 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/InjectionMetaObjectHandler.java create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateDt.java create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateUpdateDt.java diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java index 34dd1a624..08b554b48 100644 --- a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java @@ -2,9 +2,11 @@ package com.aizuda.snailjob.template.datasource.config; import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.template.datasource.enums.DbTypeEnum; +import com.aizuda.snailjob.template.datasource.handler.InjectionMetaObjectHandler; import com.aizuda.snailjob.template.datasource.utils.DbUtils; import com.aizuda.snailjob.template.datasource.utils.RequestDataHelper; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; +import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; @@ -46,15 +48,24 @@ public class SnailJobTemplateAutoConfiguration { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); DbTypeEnum dbTypeEnum = DbUtils.getDbType(); + + // 动态设置mapper资源: 通用 + 数据库专用 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - Resource[] resources1 = resolver.getResources("classpath*:/template/mapper/*.xml"); - Resource[] resources2 = resolver.getResources(MessageFormat.format("classpath*:/{0}/mapper/*.xml", dbTypeEnum.getDb())); + Resource[] templateMapperResource = resolver.getResources("classpath*:/template/mapper/*.xml"); + Resource[] specificMapperResource = resolver.getResources(MessageFormat.format("classpath*:/{0}/mapper/*.xml", dbTypeEnum.getDb())); List resources = new ArrayList<>(); - resources.addAll(Arrays.asList(resources1)); - resources.addAll(Arrays.asList(resources2)); + resources.addAll(List.of(templateMapperResource)); + resources.addAll(List.of(specificMapperResource)); factoryBean.setMapperLocations(resources.toArray(new Resource[0])); + + // 分页插件 factoryBean.setPlugins(mybatisPlusInterceptor); factoryBean.setTypeAliasesPackage(mybatisPlusProperties.getTypeAliasesPackage()); + + // 自动填充 + GlobalConfig globalConfig = mybatisPlusProperties.getGlobalConfig(); + globalConfig.setMetaObjectHandler(new InjectionMetaObjectHandler()); + factoryBean.setGlobalConfig(mybatisPlusProperties.getGlobalConfig()); return factoryBean.getObject(); @@ -91,4 +102,5 @@ public class SnailJobTemplateAutoConfiguration { return dynamicTableNameInnerInterceptor; } + } diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/InjectionMetaObjectHandler.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/InjectionMetaObjectHandler.java new file mode 100644 index 000000000..778fc5269 --- /dev/null +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/InjectionMetaObjectHandler.java @@ -0,0 +1,52 @@ +package com.aizuda.snailjob.template.datasource.handler; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import com.aizuda.snailjob.template.datasource.exception.SnailJobDatasourceException; +import com.aizuda.snailjob.template.datasource.persistence.po.CreateDt; +import com.aizuda.snailjob.template.datasource.persistence.po.CreateUpdateDt; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; + +import java.time.LocalDateTime; + +/** + * @author: dhb52 (adopted from ruoyi-vue-plus) + * @date: 2024-06-16 23:22 + */ +@Slf4j +public class InjectionMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + try { + if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof CreateDt baseEntity) { + LocalDateTime current = ObjectUtil.isNotNull(baseEntity.getCreateDt()) + ? baseEntity.getCreateDt() : LocalDateTime.now(); + baseEntity.setCreateDt(current); + } + if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof CreateUpdateDt baseEntity) { + LocalDateTime current = ObjectUtil.isNotNull(baseEntity.getCreateDt()) + ? baseEntity.getCreateDt() : LocalDateTime.now(); + baseEntity.setUpdateDt(current); + } + } catch (Exception e) { + throw new SnailJobDatasourceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); + } + } + + @Override + public void updateFill(MetaObject metaObject) { + try { + if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof CreateUpdateDt baseEntity) { + LocalDateTime current = LocalDateTime.now(); + // 更新时间填充(不管为不为空) + baseEntity.setUpdateDt(current); + } + } catch (Exception e) { + throw new SnailJobDatasourceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); + } + } + +} diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateDt.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateDt.java new file mode 100644 index 000000000..00c567c8a --- /dev/null +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateDt.java @@ -0,0 +1,23 @@ +package com.aizuda.snailjob.template.datasource.persistence.po; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class CreateDt implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createDt; + +} diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateUpdateDt.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateUpdateDt.java new file mode 100644 index 000000000..4b21ba9c7 --- /dev/null +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/CreateUpdateDt.java @@ -0,0 +1,18 @@ +package com.aizuda.snailjob.template.datasource.persistence.po; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class CreateUpdateDt extends CreateDt { + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateDt; + +}