本帖最后由 ai_wshao 于 2012-08-27 19:48:28 编辑

解决方案 »

  1.   

    楼主把参数封装到Map里面去。
    if(meetId!=null)
       map.put("meetId",meetId);
    大概这样
      

  2.   

    你的意思装Map然后,循环出参数来?那我同样可以用Object[] params = {X,X,x,x};
    这就是是最好的方法?求解...
      

  3.   

     这有什么难的??
     sql + " where no like '%'||"+no+"||'%' and name like '%'||"+name+"||'%' and  ....
      

  4.   

    if判断16种可能,还是拼sql语句吧,写成方法。
      

  5.   

    StringBuffer sb = new StringBuffer();
    StringBuffer param = StringBuffer();
    sb.append(" from table where 1=1 ");
    id=id==null?"":id;
    if(!"".equals(id)){
      sb.append(" and id=? ");
      param.append(id);
    }
    name=name==null?"":name;
    if(!"".equals(name)){
      sb.append(" and name=? ");
      param.append(name);
    }
    start==start?"":start;
    if(!""equals(start)){
      sb.append(" and start > ?")
      param.append(start);
    }
    end==end?"":end;
    if(!"".equals(end)){
      sb.append(" and end < ? ");
      param.append(end);
    }
    this.hibernateTemplet.query(sb.toString(),param);
    应该差不多了吧
      

  6.   

    后来我是  这样
    //用于过滤空值和空指针
    public boolean reString(String ss){
    return null!=ss&!ss.equals("");
    }
    弄得,也很麻烦呀。
      

  7.   

    我记者以前用hibernate 里面有个criteria方法可以搞定原理就是如果参数存在就拼接上sql语句
      

  8.   

    当然你如果手写sql也可以哦。
      

  9.   

    正解, 但是建议使用StringUtils.isNotBlank(str)
      

  10.   

    这个肯定要比like的那个效率高
      

  11.   

    用上
       where 1=1 
    后面就是n个if条件判断组合sql
      

  12.   

     StringBuffer hql = new StringBuffer(" from NgtClient nc where 1=1 ");
             Map<Object, Object> map = new HashMap<Object, Object>();
             if(searchClient!=null && searchClient.length()!=0){
    hql.append(" and nc.loginName like :loginName ");
    hql.append(" or nc.province like :province ");
    hql.append(" or nc.city like :city ");
    map.put("loginName", "%" + searchClient + "%");
    map.put("province", "%" + searchClient + "%");
    map.put("city", "%" + searchClient + "%");
             }
     if(nc != nuu && nc.name.length()>0){
    hql.append(" and nc.name = :自定义 ");
    map.put("自定义", nc.getName());
     }
             hql.append(" order by nc.id desc ");
             //查询出所有客户的信息
             List<NgtClient> clientUserList =
                 super.getSessionFactory()
                     .getCurrentSession()
                     .createQuery(hql.toString())
                     .setProperties(map)
     .setFirstResult(firstResult)
     .setMaxResults(maxResult)
                     .list();
      

  13.   

    where 1=1 这个方法在数据量大的情况下,影响查询效率,简单的加个方法去掉where1=1.
    StringBuffer sb = new StringBuffer();
    StringBuffer param = new StringBuffer();
    sb.append(" from table ");
    id=id==null?"":id;
    if(!"".equals(id)){
      sb.append(whereOrAnd(param+"")+" id=? ");
      param.append(id);
    }
        ......//其他参数依法炮制
    //小窍门去掉where 1=1。提高查询效率
    private String whereOrAnd(String param){
    return !"".equals(param)&&null!=param? "and" : "where";
    }
      

  14.   

    可一使用对象查询拉
    Interface CriteriaQuery<T>