1.错误场景:
秒杀页面商品列表页展示商品数据,需要查询数据库:根据秒杀时间区间使用通用Mapper的条件查询方式查询。代码如下,此处只展示条件查询部分代码:
// 1.构建条件查询
Example example = new Example(SeckillGoods.class);
Example.Criteria criteria = example.createCriteria();
// 1) 状态为已审核 status:1
criteria.andEqualTo("status", "1");
// 2) 库存大于0 stock_count>0
criteria.andGreaterThan("stockCount", 0);
// 3) 秒杀开始时间大于等于秒杀区间开始时间 start_time>=秒杀区间开始时间
criteria.andGreaterThanOrEqualTo("startTime", dateMenu);
// 4) 秒杀结束时间小于秒杀区间开始时间加2小时 end_time<dateMenu+2
criteria.andLessThan("endTime", DateUtil.addDateHour(dateMenu, 2));
// 排除已经加入了Redis的商品,不排除会一直重复添加
// 先获取当前命名空间下的所有key即已经存入的商品id
Set keys = redisTemplate.boundHashOps(timeNameSpace).keys();
if (keys != null && keys.size()>0){
// 排除已经存入的商品
criteria.andNotIn("id", keys);
}
// 2.执行条件查询
List<SeckillGoods> seckillGoods = seckillGoodsMapper.selectByExample(example);
参数dateMenu:秒杀时间区间的起始时间;例如:秒杀时间为2020-06-20 10:00:00——2020-06-20 12:00:00,此处dateMenu就是2020-06-20 10:00:00;但此处并不是我们常用的这种时间格式,而是:Sat Jun 20 10:00:00 CST 2020这种格式,这也是导致查询失败的原因。这是重点。
2.解决方案
// 1.构建条件查询
Example example = new Example(SeckillGoods.class);
Example.Criteria criteria = example.createCriteria();
***// 此处对时间格式进行统一处理,问题得到解决***
String startTime = DateUtil.data2str(dateMenu, "yyyy-MM-dd HH:mm:ss");
String endTime = DateUtil.data2str(DateUtil.addDateHour(dateMenu, 2), "yyyy-MM-dd HH:mm:ss");
// 1) 状态为已审核 status:1
criteria.andEqualTo("status", "1");
// 2) 库存大于0 stock_count>0
criteria.andGreaterThan("stockCount", 0);
// 3) 秒杀开始时间大于等于秒杀区间开始时间 start_time>=秒杀区间开始时间
criteria.andGreaterThanOrEqualTo("startTime", startTime);
// 4) 秒杀结束时间小于秒杀区间开始时间加2小时 end_time<dateMenu+2
criteria.andLessThan("endTime", endTime);
// 排除已经加入了Redis的商品,不排除会一直重复添加
// 先获取当前命名空间下的所有key即已经存入的商品id
Set keys = redisTemplate.boundHashOps(timeNameSpace).keys();
if (keys != null && keys.size()>0){
// 排除已经存入的商品
criteria.andNotIn("id", keys);
}
// 2.执行条件查询
List<SeckillGoods> seckillGoods = seckillGoodsMapper.selectByExample(example);
3.总结
数据库的数据一般使用yyyy-MM-dd HH:mm:ss格式,不管使用何种连接符,但是代码中的时间格式默认是Sat Jun 20 10:00:00 CST 2020这种格式,所以我们在查询数据库时,要代码中的时间格式和数据库时间格式统一。
但是视频中老师采用我第一次使用的方式并没有发生问题,不知道为什么,配置文件都是一样的。
萌新记录自己发生的问题,不喜绕道,谢谢!
1万+

被折叠的 条评论
为什么被折叠?



