需求描述:
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等,而这两个字段也是阿里巴巴java开发手册中创建表时推荐我们添加的。因此,在这里,我将告诉大家如何使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作。
首先在这里我有一张user表,我为它添加了一些数据,如下图所示。
第一步:在User表中添加datetime类型的新的字段 create_time、update_time。
第二步:实体类上增加字段并添加自动填充注解。
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) // 表示在进行插入操作时会填充字段
private Date createTime;
// @TableField(fill = FieldFill.UPDATE)
@TableField(fill = FieldFill.INSERT_UPDATE) // 表示在进行插入或更新操作时会填充字段
private Date updateTime;
}
第三步:实现元对象处理器接口。
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
// setFieldValByName方法中参数分别为实体类的属性名、要填充的值,元数据对象
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
第四步:测试
@Test
public void testInsert() {
User user = new User();
user.setAge(18);
user.setEmail("fdgjfn@qq.com");
user.setName("李四");
int result = userMapper.insert(user);
System.out.println("影响的行数"+result);
}
结果:
MybatisPlus的自动填充功能就为大家讲到这里了,博客写的不怎么熟练,要是有错误希望大家多多指教!😀