前言
如果说Java开发中有什么是让人很烦的一件事,那一定是无尽的填充字段,本篇作为观众瑰宝系列第二篇,将带来公共字段填充相关的知识点,学完此篇,让你摆脱公共字段填充带来的麻烦,节省代码,降低冗余,妥妥的给项目瘦身,还能一定程度上提高程序的运行效率,所以,你心动吗?
问题描述
可以说,几乎每张表,我们都会有create_time,update_time这样的公共字段,所以几乎每次请求时我们都要去操作这样的字段并重新赋值,这就降低了我们的开发效率,且重复的代码让人不胜其烦,所以我们想要写一个公共的方法可以统一添加这些字段,而不用处处都写相同的代码!
问题解决
在数据库中添加create_time,update_time字段:
清空了表中的数据, pojo,entity中添加这两个新字段
这边使用的字符串String接收,也可使用import java.time.LocalDateTime;
package com.codingfire.cache.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private Long id;
private String username;
private String password;
private Integer age;
private String phone;
private String createTime;
private String updateTime;
}
接着去重新修改增删改查的代码,我们简单修改如下方法上没有设置时间,前端也不需要传
@PostMapping
@CachePut(value = "user", key = "#user.id")
// @CachePut(value = "userCache", key = "#backUser.id")
public User add(User user) {
userService.save(user);
User backUser = user;
return backUser;
}
@PutMapping
@CachePut(value = "user", key = "#user.id")
// @CachePut(value = "userCache", key = "#backUser.id")
public User update(User user) {
userService.updateById(user);
User backUser = user;
return backUser;
}
解决方案
创建元数据对象处理器
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: dj
* @date: 2023/12/19
*/
@Component
@Slf4j
public class MyMetaObjecthandler implements MetaObjectHandler {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 插入时填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自动填充");
String now = sdf.format(new Date());
this.setFieldValByName("createTime", now, metaObject);
this.setFieldValByName("createBy", 1, metaObject);
}
/**
* 更新时填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("公共字段自动填充");
String now = sdf.format(new Date());
this.setFieldValByName("updateTime",now,metaObject);
this.setFieldValByName("updateBy", 1, metaObject);
}
}
给时间字段添加注解
做完这些,还需要给自动填充的字段增加一个注解。
如果是插入填充:
@TableField(fill = FieldFill.INSERT)
如果是插入和更新时都填充:
@TableField(fill = FieldFill.INSERT_UPDATE)
进去这个注解类可以看到给我们提供了四种方式
测试
我们重新启动项目,用postman调用此接口,新增加一个用户
查看数据库中新增加的用户信息是否包含了时间