背景
数据库存储的时间字段的类型是datetime
Java实体类的时间字段类型是Date
需求:响应前端的时间字段格式为”yyyy-MM-dd HH:mm:ss“
步骤
1、定义resultMap
定义 Java 对象和数据库表字段的对应关系,在 mapper.xml 文件中使用 #{属性名,jdbcType=数据库字段类型} 来进行参数传递和结果集映射,例如:
<resultMap id="userResultMap" type="User">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
</resultMap>
2、实体类时间字段上添加JsonFormat注解
@JsonFormat日期格式化你的pattern格式,timezone设置时区
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
注:时区也可以在application.yml或application.propertites配置文件中添加,一劳永逸,@JsonFormat就不需要配置timezone了
spring:
jackson:
time-zone: Asia/Shanghai
特殊解决方式如下
步骤1和2没有解决的话,继续如下三个步骤
3、自定义类型处理器(MyBatis支持)
public class MyDateTypeHandler implements TypeHandler<Date> {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void setParameter(PreparedStatement ps, int i, Date date, JdbcType jdbcType) throws SQLException {
if (date == null) {
ps.setNull(i, jdbcType.TYPE_CODE);
} else {
ps.setString(i, sdf.format(date));
}
}
@Override
public Date getResult(ResultSet rs, String columnName) throws SQLException {
Timestamp ts = rs.getTimestamp(columnName);
return ts == null ? null : new Date(ts.getTime());
}
@Override
public Date getResult(ResultSet rs, int columnIndex) throws SQLException {
Timestamp ts = rs.getTimestamp(columnIndex);
return ts == null ? null : new Date(ts.getTime());
}
@Override
public Date getResult(CallableStatement cs, int columnIndex) throws SQLException {
Timestamp ts = cs.getTimestamp(columnIndex);
return ts == null ? null : new Date(ts.getTime());
}
}
4、将类型处理器Bean注入容器(在MyBatis配置类中)
@Configuration
@MapperScan({"com.example.mapper"})
public class MyBatisConfig {
@Bean
public TypeHandler<Date> myDateTypeHandler() {
return new MyDateTypeHandler();
}
}
5、mapper.xml文件中修改
<resultMap id="myResultMap" type="com.example.MyResultType">
<id property="id" column="id" />
<result property="createTime" column="create_time" typeHandler="com.example.MyDateTypeHandler"/>
</resultMap>
结果SUCCESS
文章来源:https://www.toymoban.com/news/detail-829487.html
结束语:当你在做你热爱的事情时,你永远不会感到疲惫。文章来源地址https://www.toymoban.com/news/detail-829487.html
到了这里,关于MyBatis实现 Java 实体类和数据库中日期类型之间的转换(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!