MySQL与Java对应的时间类型

本文讨论了MySQL中的时间类型与Java中的对应关系,特别是在mybatis中使用Date类型查询时遇到的问题,提供了解决方案一(指定jdbcType为DATE)和解决方案二(将Java.util.Date改为java.sql.Date).
摘要由CSDN通过智能技术生成

1. MySQL时间类型与Java对应的时间类型

MySql的时间类型有Java中与之对应的时间类型
datejava.sql.Date
Datetimejava.sql.Timestamp
Timestampjava.sql.Timestamp
Timejava.sql.Time
Yearjava.sql.Date

2. 使用mybatis中遇到Date类型的问题

  1. 在StudentMapper.xml使用Date类型作为查询条件

    <select id="selectByBirth" resultType="student">
        select * from t_student where birth = #{birth}
    </select>
    
  2. 在test方法中执行该语句,并返回查找结果

    注意:这里使用的Date是Java.util.Date类型,并使用SimpleDateFormat更改了日期表示

    @Test
    public void testSelectByBirth() throws Exception {
    	StudentMapper mapper = SqlSessionUtil.openSession().getMapper(StudentMapper.class);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = sdf.parse("2022-08-16");
        System.out.println(birth);
        List<Student> students = mapper.selectByBirth(birth);
        students.forEach(student -> System.out.println(student));
    }
    
  3. 传入的是"2022-08-16"的Date类型,执行过后,发现它给sql的select传的参数为 时间戳类型,与"2022-08-16"不一致,导致搜索不到结果。问题截图如下:

    image-20231018001328115

  4. 解决方案1:在StudentMapper.xml的select语句中指定jdbcType=DATE,默认应该是Timestamp。修改结果如下:

    <select id="selectByBirth" resultType="student">
        select * from t_student where birth = #{birth, jdbcType=DATE}
    </select>
    

    这时再次执行结果如下:可以发现能查到记录了image-20231018001657089

    解决方案2:将所有的java.util.Date改为java.sql.Date类型,这种也可以解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值