并测试了一下,有几率出现%没有的情况
代码
public QueryResult findAll(SysLog log, Page page) {
Pager pager = dao.createPager(page.getPage(), page.getRows());
Criteria cri = CommonUtil.getCriteria(log);
// 这个方法很方便,就是操作符需要自己重新写方法覆盖
// Criteria cri = Cnd.from(dao, log);
if (cri != null) {
// 动态排序也可以,这里就不写了。
cri.getOrderBy().desc("date");
}
List<SysLog> logs = dao.query(SysLog.class, cri, pager);
pager.setRecordCount(dao.count(SysLog.class, cri));
return new QueryResult(logs, pager);
}
public static Criteria getCriteria(Object obj) {
Criteria cri = Cnd.cri();
Class<?> clz = obj.getClass();
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {
if (!field.isAccessible()) {
field.setAccessible(true);
}
// 判断值为不为空
try {
if (!Lang.isEmpty(field.get(obj))) {
if (field.get(obj).toString().length() == 0) {
continue;
}
// 获取nutz字段注解
Column column = field.getAnnotation(Column.class);
if (column == null) {
continue;
}
// 获取数据库字段名称
String columnName = (column.value() == "" || column.value().length() == 0) ? field.getName()
: column.value();
// 获取操作符
Operator oper = field.getAnnotation(Operator.class);
if (oper == null) {
continue;
}
// 封装条件并塞入条件集合
SqlExpressionGroup expression = Cnd.exps(columnName, oper.value(), field.get(obj));
cri.where().and(expression);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return cri;
}