在MyBatisPlus中使用@TableField完成字段自动填充的操作

网友投稿 1010 2023-02-14

在MyBatisPlus中使用@TableField完成字段自动填充的操作

在MyBatisPlus中使用@TableField完成字段自动填充的操作

场景

官方文档:

字段注解 @TableField

com.baomidou.mybatisplus.annotations.TableField

描述

value

字段值(驼峰命名方式,该值可无)

update

预处理 set 字段自定义注入

condition

预处理 WHERE 实体条件自定义运算规则

el

详看注释说明

exist

是否为数据库表字段( 默认 true 存在,false 不存在 )

strategyDyxtmDhKI

字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )

fill

字段填充标记 ( FieldFill, 配合自动填充使用 )

字段填充策略 FieldFill

描述

DEFAULT

默认不处理

INSERT

插入填充字段

UPDATE

更新填充字段

INSERT_UPDATE

插入和更新填充字段

实现

实体类中有如下属性,通过上面的自动填充属性,我们可以实现

在进行插入操作时对

添加了注解@TableField(fill = FieldFill.INSERT)

的字段进行自动填充。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)

的字段在进行插入和更新时进行自动填充。

/**

* 创建人

*/

@TableField(fill = FieldFill.INSERT)

private Long creatorId;

/**

* 创建时间

*/

@TableField(fill = FieldFill.INSERT)

private Date gmtCreat;

/**

* 修改人

*/

@TableField(fill = FieldFill.INSERT_UPDATE)

private Long modifierId;

/**

* 修改时间

*/

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date gmtModified;

/**

* 是否可用

*/

@TableField(fill = FieldFill.INSERT)

private Boolean availableFlag;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置

在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler

并重写其方法:

package com.ws.api.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.util.Date;

/**

* 自动填充处理类

* @author badao

* @version 1.0

* @see

**/

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName("modifierId", new Long(111), metaObject);

this.setFieldValByName("gmtModified", new Date(), metaObject);

this.setFieldValByName("creatorId", new Long(111), metaObject);

this.setFieldValByName("gmtCreat",new Date(), metaObject);

this.setFieldValByName("availableFlag",true, metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName("modifierId", new Long(111), metaObject);

this.setFieldValByDyxtmDhKIName("gmtModified", new Date(), metaObject);

}

}

其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。

补充:Mybatis-Plus里 @TableField注解 自动赋值功能的配置类

package com.jt.auto;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

impDyxtmDhKIort java.util.Date;

//完成自动填充功能

@Component //将该对象交给spring容器管理

public class MyMetaObjectHandler implements MetaObjectHandler {

/**

* 在POJO中添加了 新增/更新的注解,但是必须在数据库的字段中完成赋值的操作.

* 所以.必须明确,新增/更新时操作的是哪个字段,及值是多少

* * * @param metaObject

*/

@Override

public void insertFill(MetaObject metaObject) {

this.setInsertFieldValByName("created", new Date(), metaObject);

this.setInsertFieldValByName("updated", new Date(), metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setUpdateFieldValByName("updated", new Date(), metaObject);

}

}

@TableField注解完成自动填充赋值使用 案例:

package com.jt.pojo;

import java.io.Serializable;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.TableField;

import lombok.Data;

import lombok.experimental.Accessors;

//pojo基类,完成2个任务,2个日期,实现序列化

@Data

@Accessors(chain=true)

public class BasePojo implements Serializable{

@TableField(fill = FieldFill.INSERT) //新增有效

private Date created;

@TableField(fill = FieldFill.INSERT_UPDATE) //新增和更新有效

private Date updated;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:移动开发平台(移动开发平台对比)
下一篇:微信小程序转app(微信小程序转盘是什么游戏)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~