• springboot~MyBatisPlus中使用@TableField完成字段自动填充


    字段注解 @TableField中的参数fill

    com.baomidou.mybatisplus.annotations.TableField

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

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

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

    DEFAULT 默认不处理
    
    INSERT 插入填充字段
    
    UPDATE 更新填充字段
    
    INSERT_UPDATE 插入和更新填充字段
    
    

    使用

    @Data
    @EqualsAndHashCode(callSuper=false)
    @TableName("sys_user")
    public class SysUserEntity extends BaseEntity {
    	private static final long serialVersionUID = 1L;
    	/**
    	 * 用户名
    	 */
    	private String username;
    	/**
    	 * 密码
    	 */
    	private String password;
           /**
           * 创建者
           */
          @TableField(fill = FieldFill.INSERT)
          private Long  creator;
          /**
           * 创建时间
           */
          @TableField(fill = FieldFill.INSERT)
          private Date createDate;
    	/**
    	 * 更新者
    	 */
    	@TableField(fill = FieldFill.INSERT_UPDATE)
    	private Long updater;
    	/**
    	 * 更新时间
    	 */
    	@TableField(fill = FieldFill.INSERT_UPDATE)
    	private Date updateDate;
    
    
    }
    

    添加hander对它进行处理

    /**
     * 公共字段,自动填充值
     *
     * @author Mark sunlightcs@gmail.com
     */
    @Component
    public class FieldMetaObjectHandler implements MetaObjectHandler {
        private final static String CREATE_DATE = "createDate";
        private final static String CREATOR = "creator";
        private final static String UPDATE_DATE = "updateDate";
        private final static String UPDATER = "updater";
    
        @Override
        public void insertFill(MetaObject metaObject) {
            UserDetail user = SecurityUser.getUser();
            Date date = new Date();
    
            //创建者
            strictInsertFill(metaObject, CREATOR, Long.class, user.getId());
            //创建时间
            strictInsertFill(metaObject, CREATE_DATE, Date.class, date);
            //更新者
            strictInsertFill(metaObject, UPDATER, Long.class, user.getId());
            //更新时间
            strictInsertFill(metaObject, UPDATE_DATE, Date.class, date);
        }
    
           @Override
           public void updateFill(MetaObject metaObject) {
            //更新者
            strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId());
            //更新时间
            strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date());
        }
    
    

    当然,我们自己写拦截器,去拦截mybatis最终的insert,update方法也是可以实现相同的功能的。

  • 相关阅读:
    java实现第八届蓝桥杯数位和
    java实现第八届蓝桥杯数位和
    java实现第八届蓝桥杯数位和
    java实现第八届蓝桥杯数位和
    java实现第八届蓝桥杯数位和
    java实现第九届蓝桥杯三角形面积
    java实现第九届蓝桥杯三角形面积
    java实现第九届蓝桥杯三角形面积
    JAVA中this的三种用法的详解
    JSON字符串转换为Map
  • 原文地址:https://www.cnblogs.com/lori/p/16425046.html
Copyright © 2020-2023  润新知