`
zhouguiping2008
  • 浏览: 5004 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解析动态参数

阅读更多
ibatis里面解析动态sql的场景,很实用,留下来。

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        String sql = "select * from user where user=$user$ and pwd=$pwd$ order by age";
        sql = "select * from user where user=#user# and pwd=#pwd# order by age";
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("user", "zhouguiping");
        map.put("pwd", "123456");
        String s = processDynamicParam(sql,"#",map);;
        System.out.println(s);
    }

    /**
     * 解析动态参数.
     * @param 动态文本.
     * @param param 参数列表.
     * @return 替换参数后的文本.
     */
    private static String processDynamicParam(String text ,String split,Map<String,Object> param){
        StringTokenizer parser = new StringTokenizer(text,split,true);
        String token = null;
        String lastToken = null;//最后一个token.
        StringBuilder temp = new StringBuilder();
        while(parser.hasMoreTokens()){
            token = parser.nextToken();
            if(split.equalsIgnoreCase(lastToken)){//上一次的token是分隔符
                if(!split.equalsIgnoreCase(token)){//这次的token不是分隔符,说明就是需要替换的变量
                    Object value = param.get(token);
                    temp.append(value);
                    token = parser.nextToken();
                    if(!split.equalsIgnoreCase(token)){//如果下一个token不是分隔符就抛出异常
                        throw new RuntimeException("invalid text.");
                    }
                    token = null;//重置token为null,以便执行后续的遍历.
                }
            }else{//上次的token不是分隔符,比如第一次
                if(!split.equalsIgnoreCase(token)){//这次的token不是分隔符,说明是文本。
                    temp.append(token);//增加文本.
                }
            }
            lastToken = token;
        }
        return temp.toString();
    }
分享到:
评论

相关推荐

    动态块参数精辟解析

    参数在动态块中最根本的作用是指示方向,与几何中的向量类似,参数有基点和方向两大要素。为了更深入地了解动态块参数的本质,下面向大家解析几个关于动态块参数常见的疑惑。

    mybatis 动态sql及参数传递

    动态标签 if标签 where标签 choose、when、otherwise 标签 set标签 trim标签 forEach标签 参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们...

    SNKRS抽签协议开发项目

    重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...

    SNKRS抽签协议开发

    重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...

    阿里云动态域名解析PHP工具,解决动态IP的服务器问题!

    在阿里云买域名的朋友可能有了解到动态解析API服务的 实际上这种功能可以替代类似花生壳服务,虽说很多在家做服务器的朋友不可能开通80端口,用别的端口做别的很多服务还是用处相当大的。 只是因为动态IP让人头疼,...

    C#实现的表达式解析与计算动态库TExprParser.dll(V1.5)

    一组C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.5)及测试exe程序,可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net ...

    动态公式解析计算

    作者:lishuai qq:149516387 .../// 变量值表,当第二参数为False时可以为null /// 计算结果 string refstr = interfaces.DataPreproces(data, true, ParaStr, ParaNum).ToString(); 计算结果: refstr = “2.5”

    springboot基础框架,含请求参数自定义解析,动态数据源配置等功能

    springboot基础框架,含请求参数自定义解析,动态数据源配置等功能

    解析及动态调用Webservice程序

    自己写的WebService分析工具,可以根据Webservice地址获得所有方法的名称、参数以及返回值类型和方法描述信息,另支持动态调用

    C#实现的表达式解析与计算动态库TExprParser.dll(V1.1)

    一个C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.1),可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。

    oneurl(C/C++的URL解析库 )

    解析url,可以得到协议(scheme),主机名(host),端口(port),域名(Domain),路径(path),查询参数(query).支持动态页面判断,路径深度等功能。 b.标准化Url,严格按照RFC文档规定的标准将不符合标准的Url...

    C#实现的表达式解析与计算动态库TExprParser.dll(V1.2)

    一个C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.2),可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。

    动态sql解析引擎,类似mybatis动态sql的功能

    orange是一个动态sql引擎,类似mybatis的功能,解析带标签的动态sql,生成?占位符的sql和?对应的参数列表。 借鉴了mybatis源码,相当于mybatis中的动态sql解析功能的抽取。 支持 if foreach where set trim

    namesilo动态域名解析脚本

    python写的namesilo动态域名解析脚本,使用此脚本的前提条件是需要已经拥有一个namesilo域名。将脚本内的参数修改为自己的参数,在系统下设置定时运行任务。支持IPv4公网IP地址和IPv6公网地址

    URL重定向,动态加载二级域名

    URLRewriter 当用户注册账号,后台审核,会为用户动态生成一个二级域名网站,

    电路基础:难点解析图解法).pptx

    难点解析 目录 判定动态电路状态 判定动态电路状态 1.研究对象 以一阶动态电路储能元件的物理量(iL或者uc)的响应曲线为研究对象。 2.电路状态 ① 零状态响应 ② 零输入响应 ③ 全响应 3.判别图解 初始值及稳态值 ...

    C#实现的表达式解析与计算动态库TExprParser.dll(V1.4)

    一组C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.4)及测试exe程序,可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net ...

    C#实现的表达式解析与计算动态库TExprParser.dll

    一个C#实现的算术、关系、逻辑与函数等的表达式计算类TExprParser,可以带{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。

    Qt 动态解析xml文件 左侧显示在QTreeWidget上 点QTreeWidget的节点使右侧界面动态切换 以报表显示

    Qt 控件包括 1.动态读取sqlite 显示在QTableWidget; 2.动态解析xml文件 左侧显示在QTreeWidget上 3.点QTreeWidget的节点使右侧界面动态切换 以报表显示。

Global site tag (gtag.js) - Google Analytics