TablePagingController对多条件组合查询的判断: ...... if (search) {// _search:true // filters:{"groupOp":"AND","rules":[{"field":"id","op":"ne","data":"5"},{"field":"amount","op":"gt","data":"100"}]} String filters = request.getParameter("filters"); if (filters != null && filters.length() > 0) { logger.info("Res-Host request filters=[" + filters + "]"); final JQGridPTO<InvHeader> pto = this.getDao() .queryByMultiCondition(page, rows, sidx, sord, filters); model.put("JSON_OBJECT", pto); ...... TablePagingDao对多条件组合查询的处理: /** * 多条件表单查询 * * @param pageNo * @param pageSize * @param sidx * @param sord * @return */ public JQGridPTO<InvHeader> queryByMultiCondition(final int pageNo, final int pageSize, final String sidx, final String sord, final String filters) { List<Criterion> criteria = Collections.emptyList(); criteria = new ArrayList<Criterion>(); // 通过searchField、searchString、searchOper生成通用的查询条件 CriterionUtil util = new CriterionUtil(); criteria.addAll(util.generateSearchCriteriaFromFilters(filters)); final String conditionSql = Criterion.convertToSql(criteria); logger.info("Condition SQL: [" + conditionSql + "]"); final Object[] array = new Object[criteria.size()]; for (int i = 0; i < criteria.size(); i++) { Criterion c = criteria.get(i); logger.info("Criteria value: [" + c.getValue() + "]"); array[i] = c.getValue(); } JdbcTemplate jdbcTemplate = this.getJdbcTemplate(); PaginationHelper<InvHeader> ph = new PaginationHelper<InvHeader>(); final String countSql = "SELECT count(*) FROM invheader" + " WHERE " + conditionSql; final String seaechSql = "SELECT id, invdate, client_id, amount, tax, total, closed, ship_via, note" + " FROM invheader" + " WHERE " + conditionSql + " ORDER BY " + sidx + " " + sord; return ph.fetchPage(jdbcTemplate, countSql, seaechSql, array, pageNo, pageSize, new ParameterizedRowMapper<InvHeader>() { public InvHeader mapRow(ResultSet rs, int i) throws SQLException { InvHeader data = new InvHeader(); data.setId(rs.getInt(1)); data.setInvdate(rs.getString(2)); data.setClient_id(rs.getInt(3)); data.setAmount(rs.getFloat(4)); data.setTax(rs.getFloat(5)); data.setTotal(rs.getFloat(6)); data.setClosed(rs.getString(7)); data.setShip_via(rs.getString(8)); data.setNote(rs.getString(9)); return data; } }); }