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());
}