文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatis实现 Java 对象和数据库中日期类型之间的转换(超详细)

2023-09-23 12:08

关注

背景

数据库存储的时间字段的类型是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://blog.csdn.net/Da_zhenzai/article/details/129532255

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯