引言
在数据库中(以MySQL为例),我们经常使用timestamp来存储时间(例如创建时间、修改时间),如果使用数据库中默认的timestamp设置,会产生两个问题:
- 在代码中我们需要手动操作数据库的时间字段(例如new Date()生成当前时间插入数据库等操作)
- 代码中对DTO对象进行JSON序列化时得到的时间字段的值可能时long型,也可能是String型(但不一定是我们想要的格式)
这篇博客中会讲述我总结的两个小技巧从而优雅的方便的解决这两个小问题。
数据库设置
首先这是一个可选的配置,可以根据业务的需求来选择是否在数据库中进行配置。数据库中存储时间大多用于两个场景,一个是记录该条数据创建时的时间,另一个则是记录该条数据最近一次更新的时间。
其实通过两条SQL语句将timestamp的默认值进行设置,在代码中我们便无需再对这两个场景下的时间字段进行任何的显示赋值。
alter table SM_USER change USER_CREATED_TIME USER_CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP;
从这条SQL语句中我们可以看出,将SM_USER表timestamp类型的USER_CREATED_TIME字段的默认值设置为“CURRENT_TIMESTAMP”,在配置了这条SQL语句后,当一条新数据插入时会自动将该字段的值设置为当前的时间戳。
alter table SM_USER change USER_UPDATED_TIME USER_UPDATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
第二条SQL语句种我们可以看出多配置“ON UPDATE CURRENT_TIMESTAMP”,在配置了这条SQL语句后,当对这条数据执行UPDATE操作时会将值自动更新为当前的时间戳,无需我们在代码中更新值。
Spring Boot Json序列化配置
做好了数据库的配置,接下来我们会解决对象JSON序列化时时间字段的格式问题。在对象上添加了 @JsonSerialize
注解后对象便可实现JSON序列化,此时我们可以在Spring Boot的配置文件application.properties中配置上 spring.jackson.date-format=yyyy-MM-dd hh:mm:ss
即可指定全局JSON序列化时的时间格式。
网友评论