`
zhouguiping2008
  • 浏览: 5312 次
  • 性别: 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();
    }
分享到:
评论

相关推荐

    动态块参数精辟解析

    ### 动态块参数精辟解析 #### 一、参数的概念及作用 在CAD软件中,**动态块**是一种能够自定义多种状态的图形对象,它通过一系列参数和动作的结合,使得用户可以根据实际需求调整图形的状态。其中,**参数**在动态...

    mybatis 动态sql及参数传递

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

    JSP中js传递和解析URL参数以及中文转码和解码问题.docx

    在JSP中,通常使用JavaScript来动态构建URL并传递参数。以下是一个典型的例子: ```javascript // 构建参数字符串 var pmt = 'sensor=' + encodeURI(encodeURI(sensor)) + 'device=' + encodeURI(encodeURI(device...

    Node.js解析ajax参数Demo

    **Node.js解析Ajax参数Demo** 在Web开发中,前端与后端的数据交互是必不可少的,Ajax(Asynchronous JavaScript and XML)技术就是实现这种交互的重要手段。在这个“Node.js解析Ajax参数Demo”中,我们将深入探讨...

    Java动态解析XML

    2. 创建一个`InputSource`对象,将`StringReader`作为参数传递,以准备解析。 3. 使用`SAXBuilder`构建XML文档对象。SAX(Simple API for XML)是一种事件驱动的解析器,适合处理大型XML文档。 4. 获取XML文档的根...

    高适配动态参数初始化文件读取源码

    在IT行业中,动态参数初始化是软件开发中常见且重要的任务,尤其在需要灵活配置和更新产品参数时。本文将深入探讨“高适配动态参数初始化文件读取源码”所涉及的技术点,包括如何利用C++语言实现 ini 文件的动态读取...

    动态域名解析与端口映射

    ### 动态域名解析与端口映射 #### 一、动态域名解析原理与应用 ##### 1.1 域名解析基础 在互联网世界里,为了方便人们记忆和访问,我们通常使用域名而非IP地址来标识一台主机的位置。然而,实际的数据传输过程中...

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

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

    properties动态获取参数

    综上所述,"properties动态获取参数"涉及了Java中读取和解析`properties`文件的核心概念,以及如何在运行时根据动态参数检索配置信息。这样的功能对于实现灵活且适应性强的应用程序至关重要。正确理解和运用这些技术...

    SNKRS抽签协议开发项目

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

    利用阿里云的API实现动态域名解析

    在IT行业中,动态域名解析(DDNS)是一项关键服务,它允许用户通过互联网访问到具有动态IP地址的设备或服务器。通常,家庭宽带用户的公网IP是动态分配的,这意味着每次连接时都可能发生变化,这使得使用静态域名指向...

    SNKRS抽签协议开发

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

    NC文件解析动态库源代码

    8. 编译与链接:开发动态库时,需要了解如何配置编译器参数,生成DLL文件以及如何在应用程序中正确链接和使用该库。 9. 跨平台兼容性:如果目标是在不同操作系统上运行,那么需要考虑库的跨平台兼容性,如Windows上...

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

    在"springboot基础框架,含请求参数自定义解析,动态数据源配置等功能"这个项目中,我们将探讨两个关键知识点:请求参数自定义解析和动态数据源配置。 1. 请求参数自定义解析: 在SpringBoot中,我们通常使用`@...

    C# 调用函数时动态获取参数名称和值

    在C#编程中,有时我们需要在运行时动态地获取函数参数的名称和值。这在处理日志记录、调试或动态构建SQL查询等场景时非常有用。本文将深入探讨如何在C#中实现这一功能。 首先,理解C#的基础:在C#中,函数参数在...

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

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

    表达式解析和执行,支持参数和函数

    在IT领域,表达式解析和执行是编程语言和应用程序中的核心功能之一,特别是在动态脚本、计算引擎或者自定义逻辑处理中。C#是一种广泛使用的面向对象的编程语言,它提供了丰富的工具和技术来实现这样的功能。本文将...

    namesilo动态域名解析脚本

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

    动态公式解析计算

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

    解析及动态调用Webservice程序

    在给定的“WebserviceAnalysis”工具中,它显然提供了一个强大的功能,即分析Webservice地址以获取其所有方法的名称、参数、返回值类型以及方法描述。这对于调试、测试和学习新的Web服务接口非常有用。此外,工具还...

Global site tag (gtag.js) - Google Analytics