实现字段自动填充功能

wxpay
LI-CCONG\李聪聪 8 months ago
parent 8d0967d3de
commit 8dcfa7fef4

@ -1,15 +1,20 @@
package cc.yunxi.common.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.util.Optional;
@Configuration
@ConditionalOnClass({MybatisPlusInterceptor.class, BaseMapper.class})
@MapperScan(basePackages = "cc.yunxi.mapper")
@ -24,4 +29,25 @@ public class MyBatisConfig {
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
@Bean
@ConditionalOnMissingBean
public MetaObjectHandler metaObjectHandler() {
// 通用字段自动填充实现
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
String userId = (String) getFieldValByName("userId", metaObject);
// 有值则不覆盖、无值自动填充、填充null时不填充
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
this.strictInsertFill(metaObject, "creator", () -> userId, String.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
};
}
}

@ -0,0 +1,47 @@
package cc.yunxi.common.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public abstract class BaseDO implements Serializable {
private static final long serialVersionUID = -1L;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 使 SysUser id
*
* 使 String
*/
@TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
private String creator;
/**
* 使 SysUser id
*
* 使 String
*/
@TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)
private String updater;
/**
*
*/
@TableLogic
private Boolean deleted;
}

@ -1,5 +1,6 @@
package cc.yunxi.domain.po;
import cc.yunxi.common.domain.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -13,23 +14,17 @@ import java.io.Serializable;
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("test")
public class Test implements Serializable {
public class Test extends BaseDO {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* id
*/
private String name;
/**
* skuid
*/
private Integer age;
private String userId;
}

@ -13,6 +13,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@SpringBootTest
@ -26,8 +27,12 @@ public class NxhsApplicationTest {
@Test
void test01() {
List<cc.yunxi.domain.po.Test> list = testService.list();
System.out.println(list);
// List<cc.yunxi.domain.po.Test> list = testService.list();
// System.out.println(list);
cc.yunxi.domain.po.Test test = new cc.yunxi.domain.po.Test();
// test.setAge(19).setName("冲哥").setCreateTime(LocalDateTime.of(2024,3,1,16,12,14));
test.setAge(20).setName("冲哥").setUserId("666");
testService.save(test);
}

Loading…
Cancel
Save