问题描述
大家好.最近在研究jqgrid,其中牵扯到了多条件查询,而且是很高级的多条件查询.如下图但是这就有个问题了spring的官方文档中有查询所有字段,更新,添加 ,删除,根据某个字段进行条件查询的最佳实践例子.但是就是没有SimpleJdbcTemplate的多条件查询字段的最佳实践例子.目前我用到的方法如下:随便找的一个例子public List<OperatorSimple> getAllOperator(int toPage, int pageSize,String login, String name, String oper_group_id, int state) {String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "+ "left join oper_group_info as g on p.oper_group_id = g.id where 1 = 1 ";Object[] params = new Object[4];int index = 0;if (!login.equals("")) {sql += " and p.login like ? ";params[index] = login;index++;}if (!name.equals("")) {sql += " and p.name like ? ";params[index] = "%" + name + "%";index++;}if (!oper_group_id.equals("")) {sql += " and p.oper_group_id like ? ";params[index] = oper_group_id;index++;}if (state == 1 || state == 0) {sql += " and p.state = ? ";params[index] = state;index++;}Object[] paramsEnd = new Object[index];System.arraycopy(params, 0, paramsEnd, 0, index);int start = MysqlPaginationUtils.getStart(toPage, pageSize);sql = MysqlPaginationUtils.paginationSQLForMySQL(sql, start, pageSize);return super.getJdbcTemplate().query(sql, paramsEnd,new OperatorSimpleMapper());}但是这个方法我感觉好像不是最佳实践.一来如果按照jqgrid提供的高级多条件查询,不是要写很多个if判断吗?(实际上我最高记录写了40多个...)二来 这样也不好进行重构.请问大家有什么好的多条件查询最佳实践吗?
解决方案
从页面上传过来的参数不是存放在request中吗?之后得到request.getParameterMap(),因为你这里是dao层,所以建议弄成一个普通的Map,调用putAll,将参数传进来之后调用for循环,拼接sql语句
解决方案二:
if 多条件里面不能少吧. 要是想共用方法的话 应该可以写一个多条件的共用方法的用不定参数,A(int toPage, int pageSize,String ... otherInfo);只是可读性就差了.期待完美的答案.. 貌似我也是想你这么用的.