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软件中,**动态块**是一种能够自定义多种状态的图形对象,它通过一系列参数和动作的结合,使得用户可以根据实际需求调整图形的状态。其中,**参数**在动态...
动态标签 if标签 where标签 choose、when、otherwise 标签 set标签 trim标签 forEach标签 参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们...
在JSP中,通常使用JavaScript来动态构建URL并传递参数。以下是一个典型的例子: ```javascript // 构建参数字符串 var pmt = 'sensor=' + encodeURI(encodeURI(sensor)) + 'device=' + encodeURI(encodeURI(device...
**Node.js解析Ajax参数Demo** 在Web开发中,前端与后端的数据交互是必不可少的,Ajax(Asynchronous JavaScript and XML)技术就是实现这种交互的重要手段。在这个“Node.js解析Ajax参数Demo”中,我们将深入探讨...
2. 创建一个`InputSource`对象,将`StringReader`作为参数传递,以准备解析。 3. 使用`SAXBuilder`构建XML文档对象。SAX(Simple API for XML)是一种事件驱动的解析器,适合处理大型XML文档。 4. 获取XML文档的根...
在IT行业中,动态参数初始化是软件开发中常见且重要的任务,尤其在需要灵活配置和更新产品参数时。本文将深入探讨“高适配动态参数初始化文件读取源码”所涉及的技术点,包括如何利用C++语言实现 ini 文件的动态读取...
### 动态域名解析与端口映射 #### 一、动态域名解析原理与应用 ##### 1.1 域名解析基础 在互联网世界里,为了方便人们记忆和访问,我们通常使用域名而非IP地址来标识一台主机的位置。然而,实际的数据传输过程中...
在阿里云买域名的朋友可能有了解到动态解析API服务的 实际上这种功能可以替代类似花生壳服务,虽说很多在家做服务器的朋友不可能开通80端口,用别的端口做别的很多服务还是用处相当大的。 只是因为动态IP让人头疼,...
综上所述,"properties动态获取参数"涉及了Java中读取和解析`properties`文件的核心概念,以及如何在运行时根据动态参数检索配置信息。这样的功能对于实现灵活且适应性强的应用程序至关重要。正确理解和运用这些技术...
重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...
在IT行业中,动态域名解析(DDNS)是一项关键服务,它允许用户通过互联网访问到具有动态IP地址的设备或服务器。通常,家庭宽带用户的公网IP是动态分配的,这意味着每次连接时都可能发生变化,这使得使用静态域名指向...
重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...
8. 编译与链接:开发动态库时,需要了解如何配置编译器参数,生成DLL文件以及如何在应用程序中正确链接和使用该库。 9. 跨平台兼容性:如果目标是在不同操作系统上运行,那么需要考虑库的跨平台兼容性,如Windows上...
在"springboot基础框架,含请求参数自定义解析,动态数据源配置等功能"这个项目中,我们将探讨两个关键知识点:请求参数自定义解析和动态数据源配置。 1. 请求参数自定义解析: 在SpringBoot中,我们通常使用`@...
在C#编程中,有时我们需要在运行时动态地获取函数参数的名称和值。这在处理日志记录、调试或动态构建SQL查询等场景时非常有用。本文将深入探讨如何在C#中实现这一功能。 首先,理解C#的基础:在C#中,函数参数在...
一组C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.5)及测试exe程序,可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net ...
在IT领域,表达式解析和执行是编程语言和应用程序中的核心功能之一,特别是在动态脚本、计算引擎或者自定义逻辑处理中。C#是一种广泛使用的面向对象的编程语言,它提供了丰富的工具和技术来实现这样的功能。本文将...
python写的namesilo动态域名解析脚本,使用此脚本的前提条件是需要已经拥有一个namesilo域名。将脚本内的参数修改为自己的参数,在系统下设置定时运行任务。支持IPv4公网IP地址和IPv6公网地址
作者:lishuai qq:149516387 .../// 变量值表,当第二参数为False时可以为null /// 计算结果 string refstr = interfaces.DataPreproces(data, true, ParaStr, ParaNum).ToString(); 计算结果: refstr = “2.5”
在给定的“WebserviceAnalysis”工具中,它显然提供了一个强大的功能,即分析Webservice地址以获取其所有方法的名称、参数、返回值类型以及方法描述。这对于调试、测试和学习新的Web服务接口非常有用。此外,工具还...