MyBatis-Plus元数据拦截器
【摘要】 1.sun-common-mybatisplus 模块创建一个MyMetaObjectHandler.javaimport com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.ste...
1.sun-common-mybatisplus 模块创建一个MyMetaObjectHandler.java
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* Description: 元数据拦截器
* 注意事项:在插入和更新时,实体类必须具有fieldName这些字段,并且要有getter和setter方法
* @Author sun
* @Create 2024/7/10 14:25
* @Version 1.0
*/
@Component // 注入容器
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入时默认填充的数据
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createBy", String.class, "handler/com/sunxiansheng");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "deleteFlag", Integer.class, 0);
this.strictInsertFill(metaObject, "version", Integer.class, 0);
}
/**
* 更新时默认填充的数据
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateBy", String.class, "handler/com/sunxiansheng");
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
2.注意事项
在插入和更新时,实体类必须具有fieldName这些字段,并且要有getter和setter方法
3.在po字段上添加@TableField注解
package com.sunxiansheng.user.entity.po;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
/**
* Description: 封装从数据库中查询的数据
* @Author sun
* @Create 2024/7/9 16:02
* @Version 1.0
*/
@TableName("user") // 指定表名
@Data
public class UserPo {
@TableId(value = "id", type = IdType.AUTO) // 指定主键
private Long id;
private String name;
private Integer age;
@TableField(fill = FieldFill.INSERT)
private String createBy;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.INSERT)
private Integer deleteFlag;
@TableField(fill = FieldFill.INSERT)
private Integer version;
}
4.测试插入,发现没有自动填充
1.原因是bean没有被注入
2.修改包名为UserApplicaion.java的扫描路径
3.bean成功注入
4.重新测试
5.抽取自动填充的属性作为基类
1.在commom模块编写
2.BaseEntity.java
package com.sunxiansheng.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* Description: entity的基类,将一些需要自动填充的属性抽取过来
* @Author sun
* @Create 2024/7/10 16:28
* @Version 1.0
*/
@Data
public class BaseEntity implements Serializable {
@TableField(fill = FieldFill.INSERT)
private String createBy;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.INSERT)
private Integer deleteFlag;
@TableField(fill = FieldFill.INSERT)
private Integer version;
}
3.修改UserPo.java,继承基类
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)