动态sql替换参数中的占位符号,正则表达式

/**
     * 替换sql中的占位参数
     * */
   public static  String getSql(String indexImpl, LinkedHashMap<String,String> params){
       //匹配#{*}格式的占位参数
       Pattern pattern = Pattern.compile("#\\{.*?\\}");
       Matcher matcher=pattern.matcher(indexImpl);

       while(matcher.find()){
           String paraStr=matcher.group();
           int i = indexImpl.indexOf(paraStr);
           String paramName=paraStr.replaceAll("#\\{", "").replaceAll("}","").trim();
           if(params!=null&&i!=-1){
               //参数防sql注入处理
               Codec ORACLE_CODEC = new OracleCodec();
               String  param= ESAPI.encoder().encodeForSQL(ORACLE_CODEC, params.get(paramName));
               //String  param=params.get(paramName);
               if(param==null){
                   String reg="(<ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)";
                   indexImpl = indexImpl.trim().replaceAll(reg, "");
               }else{
                   indexImpl=indexImpl.replace(paraStr,"'"+param+"'");
               }

           }
       }

       Pattern pattern1 = Pattern.compile("\\$\\{.*?\\}");
       Matcher matcher1=pattern1.matcher(indexImpl);
       while(matcher1.find()){
           String paraStr=matcher1.group();
           int i = indexImpl.indexOf(paraStr);
           String paramName=paraStr.replaceAll("\\$\\{", "").replaceAll("}","").trim();
           if(params!=null&&i!=-1){
               String  param= params.get(paramName);
               if(param==null){
                   String reg="(<ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)";
                   indexImpl = indexImpl.trim().replaceAll(reg, "");
               }else{
                   indexImpl=indexImpl.replace(paraStr,param);
               }
           }
       }
        return  indexImpl;
   }

    /**
     * sql查询条件处理
     * @param str
     * @param map
     * @return
     */
    public static String trimParam(String str, Map<String, String> map) {
        if (str == null) {
            return null;
        }
        for (String key : map.keySet()) {
            String reg="(<ifNotNULL)[\\s]+(column=\""+key+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+key+"\")[\\s]*(>)";
            String value = map.get(key);
            if (StringUtils.isEmpty(value)) {
                str = str.trim().replaceAll(reg, "");
            }
        }
        str = str.replaceAll("(<ifNotNULL)[\\s]+(column=\")[a-zA-Z_0-9]*(\")[\\s]*(>)", "");
        str = str.replaceAll("(</ifNotNULL)[\\s]+(column=\")[a-zA-Z_0-9]*(\")[\\s]*(>)", "");
        return str;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值