在实际项目开发中,自定义时间范围查询是常见操作,写法多样。
但是需要注意的是在执行sql查询时,要避免数据格式转换带来的效率问题。
如需按照不同时间周期做数据的分组查询统计,例如年季度月周等,请点击这里查看详情。
1.需要自定义查询如下区间的数据:
2.前段Get请求参数如下:
3.通过@DateTimeFormat注解可以将前段传递的时间字符自动转换成后端属性的Date数据类型
当然也可以通过时间格式化工具来处理时间样式,后端对应的属性写法如下:
要了解和学习时间格式化@DateTimeFormat和@JsonFormat注解请参考这里
注意:@TableField该注解用在非数据库字段,要在sql执行时做标记
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(exist = false)
private Date staTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(exist = false)
private Date endTime;
4.对应的mapper文件的xml写法依据参数的不同,写法各异(截图只展示关键部分):
- 如果时间区间参数是Date类型的:
<if test="staTime != null and endTime != null ">
and srfjsi.quota_time between #{staTime} and #{endTime}
</if>
- 如果时间区间参数是String类型的:
<if test="staTime != null and endTime != null ">
and DATE_FORMAT(srfjsi.quota_time,'%Y-%m-%d %H:%i:%s') BETWEEN #{staTime} AND #{endTime}
</if>
- 如果不使用between关键字查询,时间区间参数是String类型,也可以使用大于和小于
<if test="staTime != null and staTime != ''">
and DATE_FORMAT(srfjsi.quota_time,'%Y-%m-%d %H:%i:%s') < #{staTime}
</if>
<if test="endTime != null and endTime != ''">
and DATE_FORMAT(srfjsi.quota_time,'%Y-%m-%d %H:%i:%s') > #{endTime}
</if>
需要注意的点:
由于xml规范不可以直接使用五个保留字符,“ < > & ” ’ ”,
因此在mybaits的xml中,大于或者小于要按照如下规则进行编写。>
要写成 >
<
要写成 <
>=
要写成 >=
<=
要写成 <=