官网链接:https://mp.baomidou.com/guide/auto-fill-metainfo.html
实现步骤
这里使用创建时间(createTime)和更新时间(updateTime)进行测试。
1. 首先在原有的数据库表(user表)中添加这两个字段,如下图
2. 然后在实体类中添加这两个字段,如图最后两个字段为新加字段
@TableField() 注解 官网链接:https://mp.baomidou.com/guide/annotation.html#tablefield
- FieldFill.INSERT:新增时自动填充
- FieldFill.INSERT_UPDATE:新增或更新时自动填充
- 还有别的直接看源码即可
@Data //get和set方法 @AllArgsConstructor //有参构造 @NoArgsConstructor //无参构造 public class User { @TableId(type = IdType.AUTO) //生成的id自动增加(从数据库id自增量开始自增) private Long id; private String name; private Integer age; private String email; //自动填充配置 fill = xxx @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; }
3. 实现元对象处理器接口
新建handler包,在包中添加 MyMetaObjectHandler类(可自由命名),并实现MetaObjectHandler接口,重写其添加和更新方法
setFieldValByName()方法参数:要自动填充的字段名,赋于的值,metaObject参数
package com.health.handler; 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.util.Date; @Slf4j //日志注解 @Component //注入spring容器 public class MyMetaObjectHandler implements MetaObjectHandler { //插入时的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info("插入策略"); this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //更新时的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("更新策略"); this.setFieldValByName("updateTime",new Date(),metaObject); } }
4. 测试(这里只测试一个更新)
@Test void easyUpdate(){ User user = new User(); user.setId(5L); user.setName("五号选手"); //增加 int result = userMapper.updateById(user); System.out.println(result); //受影响的行数 }
执行之后查看数据库
注意:即使是测试也要在主程序上面加@MaooerScan("com.health.mapper")注解,扫描mapper包