feat(sj_1.1.0-beta1): mp自动填充createDt,updateDt字段
This commit is contained in:
parent
5d24bf4838
commit
14342e8929
@ -2,9 +2,11 @@ package com.aizuda.snailjob.template.datasource.config;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.aizuda.snailjob.template.datasource.enums.DbTypeEnum;
|
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.DbUtils;
|
||||||
import com.aizuda.snailjob.template.datasource.utils.RequestDataHelper;
|
import com.aizuda.snailjob.template.datasource.utils.RequestDataHelper;
|
||||||
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
|
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.MybatisPlusInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||||
@ -46,15 +48,24 @@ public class SnailJobTemplateAutoConfiguration {
|
|||||||
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
|
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
|
||||||
factoryBean.setDataSource(dataSource);
|
factoryBean.setDataSource(dataSource);
|
||||||
DbTypeEnum dbTypeEnum = DbUtils.getDbType();
|
DbTypeEnum dbTypeEnum = DbUtils.getDbType();
|
||||||
|
|
||||||
|
// 动态设置mapper资源: 通用 + 数据库专用
|
||||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||||
Resource[] resources1 = resolver.getResources("classpath*:/template/mapper/*.xml");
|
Resource[] templateMapperResource = resolver.getResources("classpath*:/template/mapper/*.xml");
|
||||||
Resource[] resources2 = resolver.getResources(MessageFormat.format("classpath*:/{0}/mapper/*.xml", dbTypeEnum.getDb()));
|
Resource[] specificMapperResource = resolver.getResources(MessageFormat.format("classpath*:/{0}/mapper/*.xml", dbTypeEnum.getDb()));
|
||||||
List<Resource> resources = new ArrayList<>();
|
List<Resource> resources = new ArrayList<>();
|
||||||
resources.addAll(Arrays.asList(resources1));
|
resources.addAll(List.of(templateMapperResource));
|
||||||
resources.addAll(Arrays.asList(resources2));
|
resources.addAll(List.of(specificMapperResource));
|
||||||
factoryBean.setMapperLocations(resources.toArray(new Resource[0]));
|
factoryBean.setMapperLocations(resources.toArray(new Resource[0]));
|
||||||
|
|
||||||
|
// 分页插件
|
||||||
factoryBean.setPlugins(mybatisPlusInterceptor);
|
factoryBean.setPlugins(mybatisPlusInterceptor);
|
||||||
factoryBean.setTypeAliasesPackage(mybatisPlusProperties.getTypeAliasesPackage());
|
factoryBean.setTypeAliasesPackage(mybatisPlusProperties.getTypeAliasesPackage());
|
||||||
|
|
||||||
|
// 自动填充
|
||||||
|
GlobalConfig globalConfig = mybatisPlusProperties.getGlobalConfig();
|
||||||
|
globalConfig.setMetaObjectHandler(new InjectionMetaObjectHandler());
|
||||||
|
|
||||||
factoryBean.setGlobalConfig(mybatisPlusProperties.getGlobalConfig());
|
factoryBean.setGlobalConfig(mybatisPlusProperties.getGlobalConfig());
|
||||||
|
|
||||||
return factoryBean.getObject();
|
return factoryBean.getObject();
|
||||||
@ -91,4 +102,5 @@ public class SnailJobTemplateAutoConfiguration {
|
|||||||
|
|
||||||
return dynamicTableNameInnerInterceptor;
|
return dynamicTableNameInnerInterceptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user