1.概述
在我们开发过程中,经常需要做一些插入操作,有些麻烦,特别是对于一些每次插入或修改都需要改变的的一些字段,例如创建时间和修改时间两个字段,和数据没什么关系但是每次修改都需要被动修改这两个字段,所以Mybatis-plus为我们带来了自动填充功能,可以在我们创建或修改时自动填充或修改这些字段。
2.介绍
FieldFill为我们提供了多种填充模式
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入时自动填充
*/
INSERT,
/**
* 修改时自动填充
*/
UPDATE,
/**
* 插入或修改时自动填充
*/
INSERT_UPDATE;
private FieldFill() {
}
}
我们只需要将@TableField(fill = FieldFill.INSERT)注解放在字段上面即可为这个字段设置自动填充
@TableField(fill = FieldFill.INSERT_UPDATE) // 插入或修改数据时进行填充
private Integer version;
创建一个类MyMetaObjectHandler继承MetaObjectHandler 定义插入和修改填充策略
/**
* @author wangli
* @data 2022/4/15 17:08
* @Description:自定义自动填充
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
Integer version = 1;
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "version", Integer.class,1);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "version", Integer.class,version++);
}
}
3.实例
3.1 导入mybatis-plus的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
3.2 配置自动填充的规则
此配置使用的是之前的mybatis-plus提供的配置方法,上面的配置方式是最新的配置方案,
此配置方案配置的是创建时间为空时如果当前有插入操作给created和updated字段插入当前时间,
如果更新数据时,更新updated字段为当前时间。
/**
* @author wangli
* @data 2022/3/21 11:30
* @Description:
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object created = getFieldValByName("created", metaObject);
if (null == created) {
//字段为空,可以进行填充
setFieldValByName("created", new Date(), metaObject);
}
Object updated = getFieldValByName("updated", metaObject);
if (null == updated) {
//字段为空,可以进行填充
setFieldValByName("updated", new Date(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
//更新数据时,直接更新字段
setFieldValByName("updated", new Date(), metaObject);
}
}
3.3 使用注解对字段进行自动填充
创建实体工具类BasePojo ,通过继承此实体类,达到可重复使用,降低代码耦合度,防止代码重复的作用。
@Data
public abstract class BasePojo implements Serializable {
@TableField(fill = FieldFill.INSERT) //自动填充
private Date created;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated;
}
3.4 实体类继承BasePojo
@Data
@AllArgsConstructor //满参构造方法
@NoArgsConstructor //无参构造方法
@ApiModel(value = "User", description = "用户信息")
public class User extends BasePojo {
@ApiModelProperty(value = "主键")
@TableId(value = "id",type = IdType.ASSIGN_ID)
private Long id;
@ApiModelProperty(value = "电话")
@TableField("mobile")
private String mobile;
@ApiModelProperty(value = "密码")
@TableField("password")
private String password;
}
4. mybatis-plus官方示例工程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64410.html