1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Mybatis-plus的自动填充功能

Mybatis-plus的自动填充功能

时间:2018-08-19 13:18:45

相关推荐

Mybatis-plus的自动填充功能

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 /4/15 17:08* @Description:自定义自动填充*/@Slf4j@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler {Integer version = 1;@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "version", Integer.class,1);}@Overridepublic 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 /3/21 11:30* @Description:*/@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic 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);}}@Overridepublic void updateFill(MetaObject metaObject) {//更新数据时,直接更新字段setFieldValByName("updated", new Date(), metaObject);}}

3.3 使用注解对字段进行自动填充

创建实体工具类BasePojo,通过继承此实体类,达到可重复使用,降低代码耦合度,防止代码重复的作用。

@Datapublic 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官方示例工程

mybatis-plus-samples: MyBatis-Plus Samples 文档 - /baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-auto-fill-metainfo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。