使用sqls工具类怎么拼接sql

奋进的小莫 发布于 2016/01/18 13:06
阅读 557
收藏 0
/**
     * 根据map参数查找
     *
     * @param paras
     * @return
     */
    public List<Blog> findByMap(Map<String, Object> paras) {
        StringBuilder sql = new StringBuilder("select * from blog ");
        if (paras.containsKey("order")) {
            sql.append(" ORDER BY ");
            sql.append(paras.get("order"));
            sql.append(" ");
        }
        if (paras.containsKey("limit")) {
            sql.append(" LIMIT ");
            sql.append(paras.get("limit"));
        }
        return this.find(sql.toString());

}

我在blog.properties文件中

findByMap=select * from blog 然后拼接要怎么处理

求波总教诲



加载中
1
车开源
车开源

我习惯把复杂查询的参数当然一个Model来处理,然后遍历这个对象所有有值的属性,然后参照Demo里把sql语句及对应的参数分别用StringBuilder和List对象存放,最后一并传入执行。我的查询有30个参数,都是可变的。

------------------------------

public void buildSQL(StringBuilder sql,List<Object> paras){
        StringBuilder sortByBuilder=new StringBuilder();
        sql.append(" from "+tableName);
        sql.append(" where 1=1 ");
        
        if(user.getStr("subcmp")!=null){
            sql.append(" and fgs=?");
            paras.add(user.getStr("subcmp"));
        }
        
        Iterator<Entry<String, Object>> its = paraModel._getAttrsEntrySet().iterator();
        
        if(its.hasNext()){
            sql.append(" and ( 1=1 ");
            while(its.hasNext()){
                Entry<String, Object> it = its.next();
                
                if(it.getValue()!=null){
                    
                    String key=it.getKey();
                    Object value=it.getValue();
                    
                    //检查比较操作
                    String cmp=controller.getPara(key+"_cmp");
                    cmp=checkCmp(cmp);
                    
                    //针对空白搜索
                    String valzy = String.valueOf(value);
                    if("blank".equalsIgnoreCase(cmp)){
                        sql.append(" "+searType+" ("+key+" is null or "+key+"=?)");
                        paras.add("");
                    }else if(valzy.indexOf(",")>-1){
                        //针对多值搜索,默认=条件
                        sortByBuilder.append(key+",");
                        
                        String[] arr = valzy.split(",");
                        sql.append(" "+searType+" (");
                        for(int x=0;x<arr.length;x++){
                            if(x>0){
                                sql.append(" or ");
                            }
                            
                            sql.append(key+" "+cmp+" ? ");
                            if("like".equalsIgnoreCase(cmp)){
                                paras.add("%"+arr[x]+"%");
                            }else{
                                paras.add(arr[x]);
                            }
                            
                        }
                        sql.append(")");
                    }else{
                        sql.append(" "+searType+" "+key+" "+cmp+" ? ");
                        
                        if("like".equals(cmp)){
                            paras.add("%"+value+"%");
                        }else{
                            paras.add(value);
                        }
                    }
                    
                    
                    
                }
            }
            
            //由于以下参数比较特殊,所以特别处理
            String spPar = controller.getPara("spPar");
            if(StrKit.notBlank(spPar)){
                if(spPar.indexOf(",")>-1){
                    String[] arr = spPar.split(",");
                    sql.append(" "+searType+" (");
                    for(int x=0;x<arr.length;x++){
                        if(x>0){
                            sql.append(" or ");
                        }
                        sql.append("spPar=?");
                        paras.add(arr[x]);
                        
                    }
                    sql.append(")");
                    sortByBuilder.append("spPar,");
                }else{
                    sql.append(" "+searType+" spPar=?");
                    paras.add(spPar);
                }
            }
            
            sql.append(")");
        }
        sql.append(" order by "+sortByBuilder.toString()+"xxx desc,yyyy");
        
    }

0
lyle_luo
lyle_luo
按正常的SQL语法拼接就好了,
0
Jimmy哥
Jimmy哥
楼主有解决方案了么
返回顶部
顶部