@Component public class AutoFillMetaInfoHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createtime", LocalDateTime.now(),metaObject); } @Override public void updateFill(MetaObject metaObject) { } }
时间: 2024-03-18 10:43:05 浏览: 22
这是一个使用 MyBatis-Plus 框架的自动填充处理器,实现了在插入数据时自动填充创建时间字段的功能。具体来说,它实现了 MetaObjectHandler 接口,并重写了其中的 insertFill 方法,在插入数据时自动为 "createtime" 字段设置当前时间。同时,它还实现了 updateFill 方法,但并没有对其进行任何处理。
相关问题
mybatisplus自动填充实现
MybatisPlus自动填充可以通过实现MetaObjectHandler接口来实现。具体步骤如下:
1. 创建一个类实现MetaObjectHandler接口,并重写其中的方法,例如:
```
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
```
2. 在实体类中使用@TableField注解标注需要自动填充的字段,例如:
```
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
// 省略getter和setter方法
}
```
3. 在MybatisPlus配置文件中配置自动填充处理器,例如:
```
@Configuration
public class MybatisPlusConfig {
@Autowired
private MyMetaObjectHandler myMetaObjectHandler;
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(myMetaObjectHandler);
return globalConfig;
}
}
```
fill = FieldFill.INSERT
FieldFill.INSERT是Mybatis Plus中的一个枚举值,用于指定字段填充的策略。当使用该枚举值时,表示在插入操作时会自动填充指定的字段。
以下是使用FieldFill.INSERT进行字段填充的示例代码:
```java
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
public class User {
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
// 其他属性和方法...
}
```
在上述示例中,我们定义了一个MyMetaObjectHandler类,实现了MetaObjectHandler接口。在insertFill方法中,使用strictInsertFill方法为createTime字段填充当前时间。在updateFill方法中,使用strictUpdateFill方法为updateTime字段填充当前时间。
然后,在实体类User的属性上使用@TableField注解,并指定fill属性为FieldFill.INSERT或FieldFill.INSERT_UPDATE,即可实现在插入或更新操作时自动填充指定的字段。