概念
这是MyBatis-Plus框架中的一个注解,用于实体类的属性上,此注解的方法有以下内容,
针对以下十四种属性,这里主要说明其常用到的三种属性。
value属性
在学习半自动ORM框架MyBatis中,我们要么使用Mapper文件中的ResultMap或者在配置中使用驼峰命名规则(map-underscore-to-camel-case)来让数据库的字段和实体类的属性名对应。而在全自动ORM框架的MyBatis-Plus中就是使用value属性来完成这项操作的。(注:忘了的可以看我之前整理的MyBatis框架笔记:SpringBoot结合MyBatis 【超详细】_springboot mybatis_小白的救赎的博客-CSDN博客)
public class User{
@TableField("user_name")
private String username;
}
exist属性
用这个属性表示该实体类的常量在数据库中不存在。否则会导致加载出问题:数据库字段与实体类属性不匹配。
public class User{
@TableField(exist = false)
private Double distance;
}
fill属性
这个就很重要了,在项目中经常会遇到一些数据,每次都使用相同的方式填充,例如:记录的创建时间、更新时间等。我们可以使用MyBatis-Plus的自动填充功能,完成这些字段的赋值工作。在《阿里巴巴的开发手册》中建议每个数据库表必须有create_time和update_time字段,于是我们可以使用这个自动填充的功能维护这两个字段。
这里做一个知识点的补充:后端的实体类属性咋都用LocalDateTime而不是Date?
1、java.util.Date的大多数方法已经过时
2、java.util.Date的输出可读性差
3、java.util.Date对应的格式化类SimpleDateFormat是线程不安全的类
4、LocalDateTime对应的格式化类DateTimeFormatter是线程安全的类
在创建数据库表的情况下,我们可以用以下的建表语句去创建create_time和update_time字段。
-- timestamp表示时间戳
-- DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候,该字段默认值为当前时间
-- ON UPDATE CURRENT_TIMESTAMP表示每次更新这条数据的时候,该字段都会更新成当前时间
CREATE TABLE `表名`(
....
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
);
在后端实体类属性中的字段使用方式如下:
public class User{
...
@TablieField(value = "create_time",fill = FieldFill.INSERT)
// 如需格式化传给前端还需要使用以下注解
// 此注解是防止数据库中的日期为yyyy-MM-ddTHH:mm:ss 其中T就是空格
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@TablieField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}