serialVersionUID

116 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情

一般是在创建数据表结构需要的java类下的一个属性,能更好地实现表的结构。

一.序列化

序列化的概念是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,就使得数据能够被轻松地存储和传输。

二.serialVersionUID

  • serialVersionUID是序列化版本号。
  • 所有可序列化的类,都有一个静态serialVersionUID属性;如果我们没有显示定义serialVersionUID,IDE默认提供一个serialVersionUID

三.作用

  • 标识一个可序列化类的版本
  • 当序列化一个对象时,会将 serialVersionUID 一并写出
  • 当反序列化一个对象时,会将读入的serialVersionUID与当前类的serialVersionUID作比较。如果相同,则反序列化成功;如果不同,则反序列化失败

四.实际操作

@TableName(value = "order")
@Data
public class order {
    /**
     * id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    private Integer productNum;

    private Double productPrice;
/**
 * 订单创建时间
 */
    private Long orderTime;

/**
 * 是否删除
 */
    @TableLogic
    private Integer isDelete;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;    //这里是关键点也就是真正的序列化对象使用,这上下两行基本不变可以套用。

四.为什么要用?

  • 如果没有显示定义serialVersionUID,每当我们对类修改时(比如:添加或删除属性),IDE提供的serialVersionUID的值都会发生改变;此时如果我们想要将之前写出的对象反序列化回来,则会发生异常,因为版本不一致会导致反序列化失败。
  • 如果我们显示的定义了serialVersionUID,那么即便我们对类进行了修改,之前序列化的对象依然能够反序列化成功,保证了向前兼容的功能。而如果我们不想向前兼容或者类的改动过大,无法向前兼容,我们可以手动更改 serialVersionUID 的值。

通俗点讲就是改变类的时候,不会因为版本不一致导致程序错误。