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");

 

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