mybatis datetime 毫秒問題

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
// 將小時至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
// 將分鐘至0
calendar.set(Calendar.MINUTE, 0);
// 將秒至0
calendar.set(Calendar.SECOND, 0);
Date timestamp = calendar.getTime();
Map<String,Object> params = ContentValues.obtain().put("timestamp",timestamp).getValues();
List<Map<String, Object>> records= recordMapper.queryRecordsByTimestamp(parmas);

@Query("select id,name,size from t_opration_recoreds where timestamp >= #{timestamp}")
List<Map<String,Object>> queryRecordsByTimestamp(Map<String,Object> paramMap);

上面的代碼邏輯爲查詢昨天和今天的操作記錄  看起來沒有任何問題 查詢結果可能也沒問題 

但當有數據timestamp是昨天0點0分0秒0毫秒時 而calendar是01毫秒時創建的 那這條數據時查詢不出來的  因爲mybatis參數是date時 毫秒是會參與比較的 以下爲查詢時mybatis的日誌

- ==>Preparing: select id,name,size from t_opration_recoreds where timestamp >= ?
- ==> Parameters: 2020-03-23 00:00:00.135(Timestamp)
- <==      Total: 2822

timestamp的cdate.toString爲 2020-03-23T08:00:00.135+0800

然而實際條數是2823條 查看日誌發現timestamp爲2020-03-23 00:00:00.135 日期裏有毫秒  而記錄的timestamp爲2020-03-23 00:00:00  肯定查詢不到

解決辦法

//方式一
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
// 將小時至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
// 將分鐘至0
calendar.set(Calendar.MINUTE, 0);
// 將秒至0
calendar.set(Calendar.SECOND, 0);
//毫秒至0
calendar.set(Calendar.MILLISECOND,0);

//方式二  共用考慮線程安全
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2020-03-23");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章