很早之前就想写的,前段时间准备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数据转换为指定格式字符串返回给前端