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 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<Resource> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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