今天说一下这个MyBatis-Plus属性自动填充以及前后端交互中时间属性匹配问题的解决

很早之前就想写的,前段时间准备ACM(划水),也就没搞这些

大家都知道,MyBatis-Plus是为了简化MyBatis开发而生,这个自动填充就是在我们进行一些操作时进行某些属性的自动填充(废话)。

先用时间转换来引个门,在之前使用MyBatis的时候,如果我们需要把Java的Date类型转换成DataBase的Date类型,通常会这样做

    @Insert("insert into user_table value(" +
            "null," +
            "#{userName}," +
            "#{userPassword}," +
            "#{nickName}," +
            "#{regestTime,jdbcType=DATE,javaType=Date}," +
            "#{loginTime,jdbcType=DATE,javaType=Date}," +
            "#{commentTime,jdbcType=DATE,javaType=Date}," +
            "#{blogTime,jdbcType=DATE,javaType=Date}," +
            "#{loginIp}," +
            "#{userSfz}" +
            ")")
    @Options(useGeneratedKeys = true, keyProperty = "uId", keyColumn = "u_id")//设置自增
    void addUser(UserInfo userInfo);

但是这个时候每次的Date肯定都是我们通过new再传入的

每次new都会特别麻烦,所以MP为我们提供了一种办法来解决这种问题

实现元素拦截器metaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        strictInsertFill(metaObject,"regDate", LocalDate.class,LocalDate.now());
//也可以用   this.setFieldValByName
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        strictUpdateFill(metaObject,"loginDate",LocalDate.class,LocalDate.now());
//也可以用   this.setFieldValByName
    }
}

添加@TableFiled注解

在对应的字段上加上对应的注解

/**
 * Title
 *
 * @ClassName: UserInfo
 * @Description:
 * @author: Karos
 * @date: 2022/9/2 8:40
 * @Blog: https://www.wzl1.top/
 */

package com.karos.bbs.Dao.Enity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user_table")
public class UserInfo {
    Integer     uId;
    @JsonProperty("userName")
    String uName;
    @JsonProperty("userPassword")
    String uPassword;
    //添加时更新
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    LocalDateTime regDate;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    LocalDateTime loginDate;
}

关于@DateTimeFormat和@JsonFormat注解

@DateTimeFormat 将前端传入后端的时间数据转换为指定格式
@JsonFormat 将JDK中的Date数据转换为指定格式字符串返回给前端

正文完