场景 官方文档: 字段注解 @TableField com.baomidou.mybatisplus.annotations.TableField 值 描述 value 字段值(驼峰命名方式,该值可无) update 预处理 set 字段自定义注入 condition 预处理 WHERE 实体条件
场景
官方文档:
字段注解 @TableField
com.baomidou.mybatisplus.annotations.TableField
字段填充策略 FieldFill
实现
实体类中有如下属性,通过上面的自动填充属性,我们可以实现
在进行插入操作时对
添加了注解@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.setFieldValByName("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; import 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; }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。