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();
}
分享到:
相关推荐
参数在动态块中最根本的作用是指示方向,与几何中的向量类似,参数有基点和方向两大要素。为了更深入地了解动态块参数的本质,下面向大家解析几个关于动态块参数常见的疑惑。
动态标签 if标签 where标签 choose、when、otherwise 标签 set标签 trim标签 forEach标签 参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们...
重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...
重点,批量账号登录,和下单提交,付款时,需要JS解析动态参数组合! 1未抓包仔细分析的匆扰! 2未协议解决批量登录的勿扰(抓包分析动态参数组合解决登录后报价,未分析未解决勿扰) 3不能与我方沟通思路和进度的...
在阿里云买域名的朋友可能有了解到动态解析API服务的 实际上这种功能可以替代类似花生壳服务,虽说很多在家做服务器的朋友不可能开通80端口,用别的端口做别的很多服务还是用处相当大的。 只是因为动态IP让人头疼,...
一组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基础框架,含请求参数自定义解析,动态数据源配置等功能
自己写的WebService分析工具,可以根据Webservice地址获得所有方法的名称、参数以及返回值类型和方法描述信息,另支持动态调用
一个C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.1),可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。
解析url,可以得到协议(scheme),主机名(host),端口(port),域名(Domain),路径(path),查询参数(query).支持动态页面判断,路径深度等功能。 b.标准化Url,严格按照RFC文档规定的标准将不符合标准的Url...
一个C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.2),可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。
orange是一个动态sql引擎,类似mybatis的功能,解析带标签的动态sql,生成?占位符的sql和?对应的参数列表。 借鉴了mybatis源码,相当于mybatis中的动态sql解析功能的抽取。 支持 if foreach where set trim
python写的namesilo动态域名解析脚本,使用此脚本的前提条件是需要已经拥有一个namesilo域名。将脚本内的参数修改为自己的参数,在系统下设置定时运行任务。支持IPv4公网IP地址和IPv6公网地址
URLRewriter 当用户注册账号,后台审核,会为用户动态生成一个二级域名网站,
难点解析 目录 判定动态电路状态 判定动态电路状态 1.研究对象 以一阶动态电路储能元件的物理量(iL或者uc)的响应曲线为研究对象。 2.电路状态 ① 零状态响应 ② 零输入响应 ③ 全响应 3.判别图解 初始值及稳态值 ...
一组C#实现的算术、关系、逻辑与函数等的表达式解析与计算类TExprParser(V1.4)及测试exe程序,可以使用{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net ...
一个C#实现的算术、关系、逻辑与函数等的表达式计算类TExprParser,可以带{n}占位符参数等,并提供详细的错误解析提示。具体使用参考http://blog.csdn.net/hulihui。测试程序需要.net 3.5环境。
Qt 控件包括 1.动态读取sqlite 显示在QTableWidget; 2.动态解析xml文件 左侧显示在QTreeWidget上 3.点QTreeWidget的节点使右侧界面动态切换 以报表显示。