实体类的常用拓展字段
程序员文章站
2022-04-14 20:41:22
...
1.正常开发当中每个实体类都应该要有一些对应的基本字段,在此给大家推荐一个正常都会用到的基本字段和一些拓展字段
package com.*.*.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yatsenglobal.base.dto.LoginAuthDto;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* The class Base entity.
*
* @author MR.CHEN
*/
@Data
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 2393269568666085258L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 版本号
*/
private Integer version;
/**
* 创建人
*/
private String creator;
/**
* 创建人ID
*/
@Column(name = "creator_id")
private Long creatorId;
/**
* 创建时间
*/
@Column(name = "created_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createdTime;
/**
* 最近操作人
*/
@Column(name = "last_operator")
private String lastOperator;
/**
* 最后操作人ID
*/
@Column(name = "last_operator_id")
private Long lastOperatorId;
/**
* 更新时间
*/
@Column(name = "update_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@Transient
private Integer pageNum;
@Transient
private Integer pageSize;
@Transient
private String orderBy;
/**
* Is new boolean.
*
* @return the boolean
*/
@Transient
@JsonIgnore
public boolean isNew() {
return this.id == null;
}
/**
* Sets update info.
*
* @param user the user
*/
@Transient
@JsonIgnore
public void setUpdateInfo(LoginAuthDto user) {
if (isNew()) {
this.creatorId = (this.lastOperatorId = user.getUserId());
this.creator = user.getUserName();
this.createdTime = (this.updateTime = new Date());
}
this.lastOperatorId = user.getUserId();
this.lastOperator = user.getUserName() == null ? user.getLoginName() : user.getUserName();
this.updateTime = new Date();
}
@Transient
@JsonIgnore
public void setUpdateInfoNotId(LoginAuthDto user) {
this.lastOperatorId = user.getUserId();
this.lastOperator = user.getUserName() == null ? user.getLoginName() : user.getUserName();
this.updateTime = new Date();
}
}
2.当我们需要对这个实体类进行拓展的时候,我们可以使用继承这个基础的形式来进行拓展,如果需要拓展额外字段,则继承这个子类,如果不需要,则继承这个父类就可以了
package com.yatsenglobal.core.mybatis;
import javax.persistence.Column;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@SuppressWarnings("serial")
public class BaseEntityExt extends BaseEntity{
/**
* delFlag : 删除标识 1:正常数据 0:已删除
*/
@Column(name = "del_flag")
private Integer delFlag;
}
3.备注:
@EqualsAndHashCode(callSuper = true)
- 此注解会生成equals(Object other) 和 hashCode()方法。
- 它默认使用非静态,非瞬态的属性
- 可通过参数exclude排除一些属性
- 可通过参数of指定仅使用哪些属性
- 它默认仅使用该类中定义的属性且不调用父类的方法
- 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
@Transient
针对于这个注解正常情况下是用于贴在数据库当中并没有真正存在在该字段的情况,当配合lombok插件的时候,直接贴在字段上即可,当自己写get方法的时候,就需要在get方法当中也贴上这个注解
转载于:https://www.jianshu.com/p/ec9ff1c5fd53
上一篇: 实体类字段的注解验证
下一篇: Scrapy框架爬取时,UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position解决方法
推荐阅读
-
mysql数据库表的创建以及字段的增删改查操作及一些常用的查询命令介绍
-
浅析常用数据库的自增字段创建方法汇总
-
关于springboot中的实体类无法映射数据库中不存在的字段
-
swoft orm中的坑(针对实体类的属性名称和数据库字段不相等)
-
C# 实体类转json数据过滤掉字段为null的字段
-
MyBatisPlus3.x代码生成器 生成实体类 自定义需要填充的 字段
-
mysql常用的添加字段,修改表名,修改表字段类型、注释等。
-
MyBatis学习2之解决字段名与实体类属性名不相同的冲突
-
java获取实体类中所有字段以及对应的注解上的内容
-
MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法总结