MyBatis-Plus的全表字段自动填充机制
发布时间: 2023-12-08 14:12:50 阅读量: 59 订阅数: 29
### 1. 简介
#### 1.1 什么是MyBatis-Plus
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上扩展了一系列实用的功能,如字段自动填充、条件构造器、逻辑删除、乐观锁、多租户等,能够极大的简化开发,提高效率。
#### 1.2 为什么需要字段自动填充机制
在实际开发中,有些字段的值并非由用户输入,而是由系统自动赋值,比如创建时间、更新时间、创建人、更新人等,为了简化开发、提高代码的整洁度和可读性,需要自动填充机制来处理这些字段的赋值,而MyBatis-Plus提供了全表字段自动填充机制来实现这一需求。
### 2. MyBatis-Plus全表字段自动填充机制的原理
#### 2.1 实体类注解配置
在实体类的字段上标注`@TableField`注解,并指定填充策略,例如 `fill = FieldFill.INSERT` 表示在插入数据时自动填充,`fill = FieldFill.UPDATE` 表示在更新数据时自动填充。
#### 2.2 数据库表设计与字段设置
在数据库表设计中,需要预留字段用于自动填充,如创建时间、更新时间、创建人、更新人等。
#### 2.3 MyBatis-Plus配置
通过配置`MetaObjectHandler`来实现字段自动填充处理逻辑,添加对应的处理方法,比如`insertFill`和`updateFill`,分别用于处理插入和更新时的字段填充逻辑。同时,通过`MybatisPlusInterceptor`实现自动填充的拦截器配置。
## 3. 创建全表字段自动填充的实体类
为了实现MyBatis-Plus的全表字段自动填充机制,我们需要对实体类进行相应的注解配置。下面将详细介绍如何创建全表字段自动填充的实体类。
### 3.1 添加注解
首先,在实体类上添加相关的注解,以告诉MyBatis-Plus哪些字段需要进行自动填充。
```java
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
@TableField(fill = FieldFill.INSERT)
private String createdBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
// 省略其他字段及对应的getter和setter方法
}
```
上述代码中,我们给实体类添加了`@TableName`注解,用于指定实体类对应的数据库表名为"user"。
然后,我们给`createdBy`字段添加`@TableField(fill = FieldFill.INSERT)`注解,表示在插入数据时自动填充该字段的值。同理,给`updatedBy`字段添加`@TableField(fill = FieldFill.INSERT_UPDATE)`注解,表示在插入和更新数据时自动填充该字段的值。
### 3.2 定义自动填充字段
在我们的示例中,我们将使用当前系统登录用户的用户名作为自动填充字段。
为了实现这个功能,我们可以使用ThreadLocal来存储当前登录用户的用户名,然后通过自定义一个实现类来实现填充逻辑。
```java
public class UserContextHolder {
private static ThreadLocal<String> contextHolder = new ThreadLocal<>()
```
0
0