场景
在管理系统中,时间的存储、查询、显示的格式往往需要统一。
这就涉及到在数据库中存储时间,使用Mybatis对时间进行比较查询,使用Springboot中的实体类存储查询时间,
使用前端时间选择器,这里是ElementUI的时间选择器。
注:
关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
实现
首先是数据库中表的设计,关于时间字段,设计为Date类型
数据库中对于时间的存储没有格式要求,只需将其设置为Date类型即可。
然后是在Springboot中进行查询时,将数据库中的时间字段映射为实体类时
/** 设置日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date szrq; /** 执行日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date zxrq; /** 结束日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date jsrq;时间属性也是Date类型的,对于时间格式的限制可以通过注解
@JsonFormat(pattern = "yyyy-MM-dd")来实现,里面跟的是格式的模式。
@JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。
要注意的是,它只会在类似@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,你直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。
这是从数据库中取数据返回给前端,如果是前端发送参数给后台,后台进行接收那
我们在对应的接收前台数据的对象的属性上加@DateTimeFormat
/** 设置日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private Date szrq; /** 执行日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private Date zxrq; /** 结束日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private Date jsrq;那么前端在传递时间参数也可以进行格式化一下,这里使用的是ElementUI的
el-date-picker示例代码如下
<el-form-item label="执行日期" prop="zxrq"> <el-date-picker clearable size="small" style="width: 200px" v-model="form.zxrq" type="date" value-format="yyyy-MM-dd" placeholder="选择执行日期"> </el-date-picker> </el-form-item> <el-form-item label="结束日期" prop="jsrq"> <el-date-picker clearable size="small" style="width: 200px" v-model="form.jsrq" type="date" value-format="yyyy-MM-dd" placeholder="选择结束日期"> </el-date-picker> </el-form-item>可以通过
value-format="yyyy-MM-dd"进行格式化显示。进行通过双向数据绑定提交到后台,后台接受后再使用其作为查询条件去筛选数据。
那么在MyBatis中怎样对时间进行比较
<if test="ksrq != null"> AND date_format(d.ddsj,'%y%m%d') >= date_format(#{ksrq},'%y%m%d') </if> <if test="jsrq != null"> AND date_format(#{jsrq},'%y%m%d') >= date_format(d.ddsj,'%y%m%d') </if>通过date_format函数对参数和数据库中的字段按照指定的相同的格式进行时间的比较。