diff --git a/nxhs-common/src/main/java/cc/yunxi/common/config/MyBatisConfig.java b/nxhs-common/src/main/java/cc/yunxi/common/config/MyBatisConfig.java index 0d57f66..52d510a 100644 --- a/nxhs-common/src/main/java/cc/yunxi/common/config/MyBatisConfig.java +++ b/nxhs-common/src/main/java/cc/yunxi/common/config/MyBatisConfig.java @@ -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); + } + }; + } + } \ No newline at end of file diff --git a/nxhs-common/src/main/java/cc/yunxi/common/domain/BaseDO.java b/nxhs-common/src/main/java/cc/yunxi/common/domain/BaseDO.java new file mode 100644 index 0000000..0d0fb24 --- /dev/null +++ b/nxhs-common/src/main/java/cc/yunxi/common/domain/BaseDO.java @@ -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; + +} \ No newline at end of file diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/Test.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/Test.java index 8c2faeb..cbc9c8f 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/Test.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/Test.java @@ -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; - /** - * sku商品id - */ + private Integer age; + + + private String userId; } diff --git a/nxhs-service/src/test/java/cc/yunxi/NxhsApplicationTest.java b/nxhs-service/src/test/java/cc/yunxi/NxhsApplicationTest.java index 1133d2f..f998549 100644 --- a/nxhs-service/src/test/java/cc/yunxi/NxhsApplicationTest.java +++ b/nxhs-service/src/test/java/cc/yunxi/NxhsApplicationTest.java @@ -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 list = testService.list(); - System.out.println(list); +// List 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); }