因为设计的日期格式与数据库中日期类型的各种数据类型都不一样,所以选择了 varchar 类型来存储日期,对应 java String 类型。所以在 mapper.xml 文件中使用的 SQL语句可以使用方法: DATE_FORMAT(字段名,"日期格式"),这是 MySQL 数据库的方法。这里需要注意的是比较日期时“小于”要使用 "<"
<if test="params.taskName != null">
and task_name like '%${params.taskName}%'
<if test="params.keyWord != null">
or task_name like '%${params.keyWord}%'
or task_describe like '%${params.keyWord}%'
</if>
</if>
<if test="params.publishTime1 != null">
and DATE_FORMAT(publish_time,'%Y-%m-%d %H:%i') >= DATE_FORMAT(#{params.publishTime1},'%Y-%m-%d %H:%i')
</if>
<if test="params.publishTime2 != null">
and DATE_FORMAT(publish_time,'%Y-%m-%d %H:%i') <= DATE_FORMAT(#{params.publishTime2},'%Y-%m-%d %H:%i')
</if>
<if test="params.endTime1 != null">
and DATE_FORMAT(end_time,'%Y-%m-%d %H:%i') >= DATE_FORMAT(#{params.endTime1},'%Y-%m-%d %H:%i')
</if>
<if test="params.endTime2 != null">
and DATE_FORMAT(end_time,'%Y-%m-%d %H:%i') <= DATE_FORMAT(#{params.endTime2},'%Y-%m-%d %H:%i')
</if>
<if test="params.keyWord != null and params.taskName == null">
and task_name like '%${params.keyWord}%'
or task_describe like '%${params.keyWord}%'
</if>
顺便记录一个问题:
keyWord 不是数据库中的字段,查询时这个参数有值的情况下 查询目标为 task_name 和 task_describe,这里需要注意拼接时 用 and 还是用 or。