在MyBatis-Plus中,MetaObjectHandler
用于对特殊字段(如创建时间、修改时间)等自动填充。 通过实现MetaObjectHandler
接口可以定义在插入和更新操作时自动填充这些字段。
1. 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
2. 创建MetaObjectHandler实现类
实现MetaObjectHandler
接口,并重写insertFill
和updateFill
方法。
package com.ck.framework.user.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 当执行插入操作时自动填充的字段
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
// 当执行更新操作时自动填充的字段
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
在插入操作时填充的字段createTime
和updateTime
,并在更新操作时填充updateTime
。
3. 配置实体类
在需要自动填充的字段上使用注解@TableField
配置fill
属性。
package com.ck.framework.user.entity.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("users") // 映射表名
public class UserPo {
@TableId
private Long id;
private String name;
private String email;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
在createTime
字段上使用@TableField(fill = FieldFill.INSERT)
,表示在插入时填充该字段;在updateTime
字段上使用@TableField(fill = FieldFill.INSERT_UPDATE)
,表示在插入和更新时均填充该字段。
4. 使用示例
在插入数据时,createTime
和updateTime
将自动填充。
package com.ck.framework.user.service;
import com.ck.framework.user.entity.po.UserPo;
import com.ck.framework.user.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void createUser(UserPo user) {
userMapper.insert(user); // 自动填充 create_time 和 update_time
}
public void updateUser(UserPo user) {
userMapper.updateById(user); // 自动填充 update_time
}
}
业务逻辑中调用createUser
和updateUser
方法时,MetaObjectHandler
将自动为你处理createTime
和updateTime
字段。