SpringCloud+MyBatis的時間查詢條件
阿新 • • 發佈:2018-12-16
一般以時間為條件查詢的主要分為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大廠常用技術等,加群不定期分享行業內大牛直播講課以及獲得內退一線網際網路公司機會。