场景
前端传过来时间,比如是‘2019-05-09’
后台使用条件构造器查询数据库中某一天的记录数。
因为涉及到时间格式的问题,如果直接用时间字段是否相等来判断则不行。所以这里使用MyBatisPlus的条件构造器的apply来拼接sql语句。
官方声明:
拼接 sql
注意事项:
该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的,反之会有!
例: apply("id = 1")--->id = 1
例: apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
实现
官方示例是mysql数据库应该这样写:
QueryWrapper<BusLogisticsOrder> BusLogisticsOrderQueryWrapper =new QueryWrapper<BusLogisticsOrder>();
BusLogisticsOrderQueryWrapper.eq("deleted_flag","0");
BusLogisticsOrderQueryWrapper.apply("date_format(gmt_creat,'%Y-%m-%d') = '"+createTime+"'");
但是如果是sqlserver数据库的话是识别不出来date_format内置函数的。
应该这样用:
QueryWrapper<BusLogisticsOrder> BusLogisticsOrderQueryWrapper =new QueryWrapper<BusLogisticsOrder>();
BusLogisticsOrderQueryWrapper.eq("deleted_flag","0");
BusLogisticsOrderQueryWrapper.apply("CONVERT(varchar(100), gmt_creat, 23)= '"+createTime+"'");