liukaihandsome 2011-02-21 17:04
浏览 1250
已采纳

spring SimpleJdbcTemplate多条件查询的最佳实践.

大家好.
最近在研究jqgrid,其中牵扯到了多条件查询,而且是很高级的多条件查询.
如下图

[img]http://dl.iteye.com/upload/attachment/422393/383f4d08-c689-3219-8a37-22e66fc807b3.png[/img]

但是这就有个问题了
spring的官方文档中有查询所有字段,更新,添加 ,删除,根据某个字段进行条件查询的最佳实践例子.
但是就是没有SimpleJdbcTemplate的多条件查询字段的最佳实践例子.

目前我用到的方法如下:

随便找的一个例子
[code="java"]
public List 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());
}[/code]

但是这个方法我感觉好像不是最佳实践.
一来如果按照jqgrid提供的高级多条件查询,不是要写很多个if判断吗?(实际上我最高记录写了40多个...)
二来 这样也不好进行重构.
请问大家有什么好的多条件查询最佳实践吗?

  • 写回答

3条回答 默认 最新

  • finallygo 2011-02-25 14:51
    关注

    从页面上传过来的参数不是存放在request中吗?
    之后得到request.getParameterMap(),因为你这里是dao层,所以建议弄成一个普通的Map,调用putAll,将参数传进来
    之后调用for循环,拼接sql语句

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog