SpringBoot项目-MybatisPlus @TableField自动生成createTime/updateTime

本文介绍了如何在Java项目中利用MyBatis-Plus进行实体类注解和MetaObjectHandler配置,实现数据自动填充与验证。通过在实体类中添加注解进行数据校验,并在Mapper.xml文件中处理insert和update方法,确保了createTime和updateTime字段的自动管理。同时,自定义MetaObjectHandler实现了插入和更新时的时间戳自动填充。
摘要由CSDN通过智能技术生成
第一步:在实体类中增加注解
  • 有好多其他的注解,请人工过滤
package com.qa.qcp.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qa.qcp.config.customAssert.Phone;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import java.util.Date;

@Data
public class AuthUser {

  public interface createUser{}
  public interface login{}
  public interface update{}
  public interface delete{}

  @NotNull(message = "uuid不能为空",groups = {update.class,delete.class})
  private String uuid;
  @Phone(groups = {createUser.class, login.class, update.class})
  @Length(min = 8,max = 20,message = "telephone长度[8,20]",groups ={createUser.class, update.class})
  private String telephone;

  @TableField(select = false)
  @Length(min = 6,max = 20,message = "密码长度大于6位数且小于20位",groups ={createUser.class, update.class})
  @NotNull(message = "密码不能为空",groups = {createUser.class, login.class})
  private String password;

  @Email(regexp = "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", message = "email格式错误",groups = {createUser.class, login.class})
  @NotNull(message = "email不能为空" ,groups = {createUser.class})
  private String email;
  @NotNull(message = "昵称不能为空",groups = {createUser.class})
  @Length(min = 1,max = 20,message = "nickname长度[1,20]",groups ={createUser.class, update.class})
  private String nickname;
  @Length(min = 1,max = 200,message = "avatar长度[1,200]",groups ={createUser.class, update.class})
  private String avatar;
  private Integer status;
  @TableField(fill = FieldFill.INSERT) // 第一次插入时自动填充
  @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss")
  private Date createTime;
  @TableField(fill = FieldFill.INSERT_UPDATE) //第一次插入时自动填充 更新时自动填充
  @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss")
  private Date updateTime;
}
第二步:配置MetaObjectHandler
  • 新建包:mybatisPlus
  • 新建类:MyMetaObjectHandler.java
package com.qa.qcp.config.mybatisplus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 在插入的时候响应相关操作
     * @param metaObject
     */
    @Override
    public void insertFill(org.apache.ibatis.reflection.MetaObject metaObject) {
    /**
     * 大意是将当前的时间赋值给字段名  也就是参数2 赋值给参数1 metaObject 可理解为当前传入对象
     * 人话:就是给当前传入对象赋值
     */
        setFieldValByName("createTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);
    }

    /**
     * 在插入的时候响应相关操作
     * @param metaObject
     */
    @Override
    public void updateFill(org.apache.ibatis.reflection.MetaObject metaObject) {
        setFieldValByName("updateTime",new Date(),metaObject);
    }
}
第三步:检查Mapper.xml文件的update/insert方法中增加createTime/updateTime
 <insert id="updateUser" parameterType="AuthUser">
        update auth_user
        <set>
            <if test="telephone != null">telephone=#{telephone},</if>
            <if test="password != null">password=#{password},</if>
            <if test="nickname != null">nickname=#{nickname},</if>
            <if test="avatar != null">avatar=#{avatar},</if>
            <if test="status != null">status=#{status},</if>
		    <!-- 这个字段不做动态判断,在service使用的时候,不需要再给对象手动赋值,经过以上2个步骤的配置后,mP自动帮我干了-->
            update_time=#{updateTime}

        </set>
        where uuid=#{uuid}

    </insert>
 <insert id="createUser" parameterType="AuthUser">
        insert into auth_user (<include refid="baseColumn"/>) values (
                                        #{uuid, jdbcType=VARCHAR},
                                        #{telephone, jdbcType=VARCHAR},
                                        #{password, jdbcType=VARCHAR},
                                        #{email, jdbcType=VARCHAR},
                                        #{nickname, jdbcType=VARCHAR},
                                        #{avatar, jdbcType=VARCHAR},
                                        #{status, jdbcType=INTEGER},
                                        #{createTime, jdbcType=TIMESTAMP},
                                        #{updateTime, jdbcType=TIMESTAMP}
                                        )

    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值