写java后端学习到的注解与知识的今日份总结

使用的是springboot+mybatis-plus框架

①@DateTimeFormat和@JsonFormat注解干什么用?有什么区别?

@DateTimeFormat注解

出处:org.springframework.format.annotation.DateTimeFormat

作用:主要对Date、Calendar、Long及Joda时间类型的属性进行格式化处理,主要处理前端时间类型与后端pojo对象中的成员变量进行数据绑定,所约束的时间格式并不会影响后端返回前端的时间类型数据格式;

前端入参数据的时间格式必须与注解中定义的时间格式相同,不然会报错,如:@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”) 则入参的格式必须为"2023-5-11 10:53:43";

单使用@DateTimeFormat只能约束前端传回的时间格式,同时不会改变原来数据的响应格式,同时传给前端的时间(中国内)会比实际时间晚8个小时

@JsonFormat注解

出处: com.fasterxml.jackson.annotation.JsonFormat;

作用:将日期类型数据在JSON格式和java.util.Date对象之间转换。约束时间的接收格式和响应格式 (接收和响应的都是JSON字符串) .与传输方向没有关系(前端到后端or后端到前端都可以使用)

 @JsonFormat 既可以约束前端传入的时间类型参数格式,也可以约束后端响应前端的时间类型格式(格式为json字符串),即更改原数据响应格式,日期类型数据在JSON格式和java.util.Date对象之间转换,同时添加‘time=“GMT+8”’来使得其使用北京时间。

使用前要求:单独使用@JsonFormat注解时需要先通过@RequestBody将入参参数映射到实体后,@JsonFormat注解才能去对时间格式进行约束; 

②@TableId注解是什么

@TableId

出处:com.baomidou.mybatisplus.annotation.TableId;

是专门用在主键上的注解,如果数据库中的主键字段名和实体中的属性名,不一样且不是驼峰之类的对应关系,可以在实体中表示主键的属性上加@Tableid注解,并指定@Tableid注解的value属性值为表中主键的字段名既可以对应上。

 string类型的id可使用assign_uuid,要求主键类型必须是String类型,会自动生成UUID进行赋值,需要考虑数据库的字段设计,数据库中的int类型的,所以存不进去,但因为主键自增,如果要修改int类型为varchar类型的话,需要去除主键自增。

③Serializable接口是什么,为什么经常用到

private static final long serialVersionUID = 1L;

在程序中为了能直接以 Java 对象的形式进行保存,然后再重新得到该 Java 对象,这就需要序列化能力。序列化其实可以看成是一种机制,按照一定的格式将 Java 对象的某状态转成介质可接受的形式,以方便存储或传输。其实想想就大致清楚基本流程,序列化时将 Java 对象相关的类信息、属性及属性值等等保存起来,反序列化时再根据这些信息构建出 Java 对象。而过程可能涉及到其他对象的引用,所以这里引用的对象的相关信息也要参与序列化。

序列化id (serialVersionUID)

序列化ID,相当于身份认证,主要用于程序的版本控制,保持不同版本的兼容性,在程序版本升级时避免程序报出版本不一致的错误。
如果定义了private static final long serialVersionUID = 1L,那么如果你忘记修改这个信息,而且你对这个类进行修改的话,这个类也能被进行反序列化,而且不会报错。一个简单的概括就是,如果你忘记修改,那么它是会版本向上兼容的。
如果没有定义一个名为serialVersionUID,类型为long的变量,Java序列化机制会根据编译的class自动生成一个serialVersionUID,即隐式声明。这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。此时如果对某个类进行修改的话,那么版本上面是不兼容的,就会出现反序列化报错的情况。

详细解释:Java对象为啥要实现Serializable接口?

④@EqualsAndHashCode和@Data

 暂放

⑤@Transactional

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值