hibernate 查询时间范围

it2023-02-26  77

public Page findPage(Page page,RecordNotice recordNotice) { StringBuffer hql = new StringBuffer("from RecordNotice t where 1=1 "); List<Object> params = new ArrayList<Object>(); /**操作时间起**/ if(!CommonUtils.isNullOrEmpty(recordNotice.getStartTime())){ hql.append(" and to_char(t.addTime,'yyyy-MM-dd') > "); hql.append(" to_char(to_date(?,'yyyy-MM-dd'),'yyyy-MM-dd ') "); params.add(CommonUtils.trim(recordNotice.getStartTime())); } /**操作时间止**/ if(!CommonUtils.isNullOrEmpty(recordNotice.getEndTime())){ hql.append(" and t.addTime < "); hql.append(" to_date(?,'yyyy-MM-dd') "); params.add(CommonUtils.trim(recordNotice.getEndTime())); } return this.findPage(page, hql.toString(), params.toArray()); }

 

这种写法适用于起始时间和结束时间都是String类型,addTime是Date类型。上面两种写法效果是一样的。

还有一种是起始时间和结束时间都是Date类型,这时不建议直接和addTime直接比较,hql要改下,(sql参数不能直接传java的日期类型,会造成字段类型错误导致了表扫描 , 要用to_date函数)用下面的方式比较合理。

/**操作时间起**/ if(!CommonUtils.isNullOrEmpty(recordNotice.getStartTime())){ hql.append(" and t.addTime > "); hql.append(" to_date(?,'yyyy-MM-dd') "); params.add(recordNotice.getStartTime()); } /**操作时间止**/ if(!CommonUtils.isNullOrEmpty(recordNotice.getEndTime())){ hql.append(" and t.addTime < "); hql.append(" to_date(?,'yyyy-MM-dd') "); params.add(recordNotice.getEndTime()); }

 

最新回复(0)