第一步:在实体类中增加注解
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>