背景
springboot项目整合Mybatis
前端传来的String类型的开始和结束时间
后端将String类型的时间转换为Date类型进行查询mysql中的数据
结果居然不一样。
当时一脸闷逼。
一、具体代码
前端请求参数:
@NotBlank(message = "开始日期")
@ApiModelProperty(value = "请求日期", required = true, example = "2024-07-01")
private String startDate;
@NotBlank(message = "结束日期")
@ApiModelProperty(value = "请求日期", required = true, example = "2024-10-01")
private String endDate;
方式一:时间处理:
// 定义日期时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
// 转换为 2024-10-23 00:00:00
String startOfDayString = searchTrackingPointParam.getStartDate();
Date startOfDay = dateFormat.parse(startOfDayString);
System.out.println("Start of day: " + startOfDay);
searchTrackingPointDTO.setStartDate(startOfDay);
// 转换为 2024-10-23 23:59:59
String endOfDayString = searchTrackingPointParam.getEndDate();
Date endOfDay = dateFormat.parse(endOfDayString);
searchTrackingPointDTO.setEndDate(endOfDay);
System.out.println("End of day: " + endOfDay);
} catch (ParseException e) {
e.printStackTrace();
}
方式二:时间处理:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
// 转换为 2024-10-23 00:00:00
String startOfDayString = searchTrackingPointParam.getStartDate() + " 00:00:00";
Date startOfDay = dateFormat.parse(startOfDayString);
System.out.println("Start of day: " + startOfDay);
searchTrackingPointDTO.setStartDate(startOfDay);
// 转换为 2024-10-23 23:59:59
String endOfDayString = searchTrackingPointParam.getEndDate() + " 23:59:59";
Date endOfDay = dateFormat.parse(endOfDayString);
searchTrackingPointDTO.setEndDate(endOfDay);
System.out.println("End of day: " + endOfDay);
} catch (ParseException e) {
e.printStackTrace();
}
数据入库的方式:
Mybatis语句:
SELECT * FROM 表名 WHERE is_deleted = 0
<if test="startDate != null and endDate != null ">
AND created_time between #{startDate} and #{endDate}
</if>
总结
两种方式查询的数量完全不一样,的原因是:
当我写完我明白了:
前者:
开始时间 :2024-07-01 转换为时间为:2024-07-01 00:00:00
结束时间:2024-10-01 转换为时间为:2024-10-01 00:00:00
后者
开始时间 :2024-07-01 转换为时间为:2024-07-01 00:00:00
结束时间:2024-10-01 转换为时间为:2024-10-01 23:59:59
明白了,这是差了一天的时间,但是呢也不对:
上述生成的sql在navicate中就能查到,但是在Mybatis中就查询不到。这个还在深究,但是呢使用的时候还是按照这种方式使用即可