1. MySQL时间类型与Java对应的时间类型
MySql的时间类型有 | Java中与之对应的时间类型 |
---|---|
date | java.sql.Date |
Datetime | java.sql.Timestamp |
Timestamp | java.sql.Timestamp |
Time | java.sql.Time |
Year | java.sql.Date |
2. 使用mybatis中遇到Date类型的问题
-
在StudentMapper.xml使用Date类型作为查询条件
<select id="selectByBirth" resultType="student"> select * from t_student where birth = #{birth} </select>
-
在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)); }
-
传入的是"2022-08-16"的Date类型,执行过后,发现它给sql的select传的参数为 时间戳类型,与"2022-08-16"不一致,导致搜索不到结果。问题截图如下:
-
解决方案1:在StudentMapper.xml的select语句中指定jdbcType=DATE,默认应该是Timestamp。修改结果如下:
<select id="selectByBirth" resultType="student"> select * from t_student where birth = #{birth, jdbcType=DATE} </select>
这时再次执行结果如下:可以发现能查到记录了
解决方案2:将所有的java.util.Date改为java.sql.Date类型,这种也可以解决问题