Mybatis学习笔记-mybatis对时间的处理

这篇博客记录了在Mybatis中处理时间时遇到的问题。当数据库字段为TIMESTAMP,POJO为DATE时,设置jdbcType为'TIMESTAMP'或'DATE'无法保存时分秒。最终发现不指定jdbcType或设为'TIMESTAMP'才能完整保存和获取时间信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库字段类型为TIMESTEAP,POJO中成员变量类型为DATE。
测试时,把参数的jdbcType指定为了‘TIMESTAMP’,测试存入数据库的时间只有年月日,而没有时分秒,后来将jdbcType改为DATA类型,还是没有时分秒的数据。
代码片段如下:

<insert id="insertEmailOne" parameterType="com.zd.site.domain.resume.EmailDomain">
          INSERT INTO t_email
               (<include refid="email_column"/>) VALUES 
          (#{id},#{sender},#{senderName},#{subject},
           #{context},#{sendDate,jdbcType=DATE})
    </insert>
 <insert id="insertEmailOne" parameterType="com.zd.site.domain.resume.EmailDomain">
          INSERT INTO t_email
               (<include refid="email_column"/>) VALUES 
          (#{id},#{sender},#{senderName},#{subject},
           #{context},#{sendDate,jdbcType=TIMESTEMP})
    </insert>

无奈╮(╯-╰)╭,后来索性把jdbcType去掉了,哇靠,居然成了!

<insert id="insertEmailOne" parameterType="com.zd.site.domain.resume.EmailDomain">
          INSERT INTO t_email
               (<include refid="email_column"/>) VALUES 
          (#{id},#{sender},#{senderName},#{subject},
           #{context},#{sendDate})
    </insert>
@Test
    public void emailTest(){
        EmailDomain emailDomain = new EmailDomain();
        emailDomain.setId(5);
        emailDomain.setSender("zenderAdmin@126.com");
        emailDomain.setSenderName("zhangsan");
        emailDomain.setSubject("aaa");
        emailDomain.setSendDate(new Date());
        emailDomain.setContext("aaa");
        ResumeService resumeService = applicationContext.getBean("ResumeService",ResumeService.class);
        resumeService.insertEmailInfo(emailDomain);
    }

这里写图片描述

这个问题解决了,从数据库中拿数据的时候又出问题了。
起初的结果集映射如下:

<resultMap type="com.zd.site.domain.resume.EmailDomain" id="emailMapper">
          <id property="id" column="ID"/>
          <result property="sender" column="SENDER"/>
          <result property="senderName" column="SENDER_NAME"/>
          <result property="subject" column="SUBJECT"/>
          <result property="context" column="CONTEXT"/>
          <result property="sendDate" column="SEND_DATE" javaType="date" jdbcType="DATE"/>
    </resultMap>

此时获取到的data数据没有时分秒信息。

EmailDomain [id=4, sender=zenderAdmin@126.com, senderName=zhangsan, subject=aaa, context=aaa, sendDate=Wed Aug 05 00:00:00 ULAT 2015]

然后把jdbcType改成TIMESTAMP或直接去掉,丢了的信息又回来了。

EmailDomain [id=4, sender=zenderAdmin@126.com, senderName=zhangsan, subject=aaa, context=aaa, sendDate=Wed Aug 05 07:02:27 ULAT 2015]

总结:
jdbcType=”DATE” 不论是持久化数据还是获取数据,都只能得到年月日信息。
jdbcType=”TIMESTAME”或不指定jdbcType属性,在持久化数据和获取数据时都会带有时分秒信息。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值