本文主要介绍在Joda DateTime使用过程中遇到的一些问题,包括 Joda DateTime字段配置Json序列化格式,Mybatis持久化层用Joda DateTime与Timestamp映射。
Joda DateTime字段配置Json序列化格式
Joda DateTime字段如果不做json序列化处理,再转为json时会带有DateTime类本身的属性信息造成冗余,同时没有格式化处理,使用不友好。
首先在maven需要额外引入包:
1 | <dependency> |
版本可以参考maven仓库自行修改。
然后自定义实现json序列化与反序列化处理,以下以“yyyy-MM-dd HH:mm:ss”格式输出为例:
序列化:
1 | public class CustomDateTimeSerializer extends JsonSerializer<DateTime> { |
反序列化:
1 | public class CustomDateTimeDeserializer extends JsonDeserializer<DateTime> { |
最后在持久层对象的DateTime类型字段加上如下注解:
1 | (using = CustomDateTimeSerializer.class) |
搞定。
Mybatis持久化层用Joda DateTime与Timestamp映射
mybatis没有内置的typeHandler处理joda time类型,因此需要自定义DateTimeTypeHandler,如下
1 | package com.qunar.echarts.util; |
然后在MyBtis的配置文件(我的mybatis-config.xml)中加入typeHandler配置项,如下
1 | <typeHandlers> |
注意在配置项中指定javaType类型,或在自定义DateTImeTypeHandler类顶部加入注解@MappedTypes(DateTime.class),此外不要在配置项中指定jdbcType类型。如果不如此配置会报错。
接下来,在mybatis的XXXMapper.xml的<resultMap>
中的日期字段加入typeHandler,如下配置(下面的datetime字段):
1 | <resultMap id="BaseResultMap" type="com.qunar.echarts.model.FlightMinuteModel"> |
这样持久层与数据库的日期映射就完成了。