SpringCloud+MyBatis的时间查询条件

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/Follow_24/article/details/84789836

一般以时间为条件查询的主要分为2种:

这里以具体到某天为例(2018-12-04),前端或api传值一般只是按天传值(2018-12-03至2018-12-04);

而后台代码处理和与数据库中日期存的值进行比较的时候,往往会精确到数据库的date格式的最小精度(时间戳)。

前端日期传值,也有几种不同的格式,常见如:

加了斜杠的:yyyy-MM-dd(2018-12-04)/yyyy-MM-dd HH:mm:ss(2018-12-04 12:00:00)

没加斜杠的:yyyyMMdd(20181204)、yyyyMMddHHmmss(20181204120000)

无论是加了斜杠或没加斜杠的,如果没有精确到秒(ss)级别,传到后端后再做数据库日期查询前,一定得加上时分秒精确再查询。否则查询出来的数据,在日期方面肯定不符合要求。下面介绍后端处理:

一、yyyy-MM-dd 格式

以查询某个时间段的数据为例,前端以yyyy-MM-dd格式把日期传进来后,在后端这样处理:

        String startTime = "2018-12-03";
        String endTime = "2018-12-04";
        Date beginCreateTime = null;
        Date endCreateTime = null;
        try{
            if (startTime != null && !startTime.equals("")) {
                beginCreateTime = DateUtils.parseDate(startTime + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
            }
            if (endTime != null && !endTime.equals("")) {
                endCreateTime = DateUtils.parseDate(endTime + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
            }

注意:" 00:00:00"、" 23:59:59" 有空格。

在mapper里面,这样处理:

    List<MerchantRouteManage> queryMerchantRouteList(@Param("beginCreateTime") Date beginCreateTime,@Param("endCreateTime") Date endCreateTime);

xml与数据库比较日期,这样处理:

      <if test="beginCreateTime != null">
        CREATE_TIME <![CDATA[ >= ]]>  #{beginCreateTime,jdbcType=TIMESTAMP}
      </if>
      <if test="endCreateTime != null">
        AND CREATE_TIME <![CDATA[ <= ]]>  #{endCreateTime,jdbcType=TIMESTAMP}
      </if>

TIMESTAMP:时间戳,这样mybatis在与oracle数据库作时间比较的话,精确到毫秒以上级别的时间戳了。

二、yyyyMMdd格式

后端这样处理:

        String startTime = "2018-12-03";
        String endTime = "2018-12-04";
        Date beginCreateTime = null;
        Date endCreateTime = null;
        try{
            if (startTime != null && !startTime.equals("")) {
                beginCreateTime = DateUtils.parseDate(startTime + "000000", "yyyyMMddHHmmss");
            }
            if (endTime != null && !endTime.equals("")) {
                endCreateTime = DateUtils.parseDate(endTime + "235959", "yyyyMMdd HH:mm:ss");
            }

其余操作同一。

注:以上用到的DateUtils是appach的

org.apache.commons.lang3.time

这个包下的,parseDate日期格式方法,也可自己用SimpleDateFormat 类日期格式化一下。

如此操作查询的数据才符合条件。

关注个人技术公众号:nick_coding1024

不定期分享最新前沿技术框架和bat大厂常用技术等,加群不定期分享行业内大牛直播讲课以及获得内退一线互联网公司机会。

猜你喜欢

转载自blog.csdn.net/Follow_24/article/details/84789836