巧用正则批量替换IBATIS中的sql参数注入方式
2008-05-19 23:18
232 查看
最近发现如果sql语句比较长,且参数比较多的时候(很多很多?),在sqlserver2000上预编译速度超慢,sqlserver2005快一倍左右,但还是没有直接执行静态的sql快,本来2秒就能搞定,结果在2000上要20多秒,2005上要10秒左右,jtds驱动预编译更慢. 真是比较晕,为了解决性能问题只能抛弃PreparedStatement了,直接拼装sql执行。好像跑题了,在IBATIS中使用PreparedStatement预编译sql,在定义参数的时候只要写成#id:INTEGER#即可了,如果要直接替换字符串需要改写为'$id$',如果一个一个文件手工修改的话那就太麻烦了,于是写了个正则小程序。因为代码实在太简单了,没啥可注释的,也没什么技术含量,发出来可能会帮助到一些懒人,呵呵。另外过几天有时间的时候要整理整理正则的东西了,每次写正则都不顺利嗨。
后记:替换后还是有些小工作要做的,因为在sqlserver中null和 '' 的含义是不相同的,一些诸如#id:INTEGER# is null的写法就不灵了。
public class ReplacePara {
public static void main(String[] args) throws IOException {
File dir = new File("src/main/resources/com/xxxx/xxxx/model/sqlserver/");
File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if (pathname.getName().startsWith("demo.xml"))
return true;
return false;
}
});
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.exists() && file.isFile()) {
replaceFile(file);
}
}
}
public static void replaceFile(File file) {
try {
String str = org.apache.commons.io.FileUtils.readFileToString(file,
"UTF-8");
str = str.replaceAll("#([^#]+?):(VARCHAR|INTEGER&&[^#])#",
"'/$$1/$'");
org.apache.commons.io.FileUtils.writeStringToFile(file, str,
"UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
}
后记:替换后还是有些小工作要做的,因为在sqlserver中null和 '' 的含义是不相同的,一些诸如#id:INTEGER# is null的写法就不灵了。
public class ReplacePara {
public static void main(String[] args) throws IOException {
File dir = new File("src/main/resources/com/xxxx/xxxx/model/sqlserver/");
File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if (pathname.getName().startsWith("demo.xml"))
return true;
return false;
}
});
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.exists() && file.isFile()) {
replaceFile(file);
}
}
}
public static void replaceFile(File file) {
try {
String str = org.apache.commons.io.FileUtils.readFileToString(file,
"UTF-8");
str = str.replaceAll("#([^#]+?):(VARCHAR|INTEGER&&[^#])#",
"'/$$1/$'");
org.apache.commons.io.FileUtils.writeStringToFile(file, str,
"UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- JS、replace利用正则表达式替换SQL所有参数为指定格式的数据
- ibatis 批量查询 注解方式 多参数(多字段)
- 使用正则实现SQL参数替换
- php脚本巧用正则批量替换函数参数
- JS、replace 利用正则表达式 ,一次性替换SQL所有参数为数据
- JS、replace利用正则表达式替换SQL所有参数为指定格式的数据
- 匹配参数JS、replace 利用正则表达式 ,一次性替换SQL所有参数为数据
- 使用ibatis时 sql中 in 的参数赋值
- 数据库被批量注入解决办法(SQL语句)
- Spring-依赖注入-多参数的构造函数注入方式
- PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能
- java 避免不同库使用left join查询速率低效 采用 sql 注入foreach 遍历list查询方式
- SQL text字段的替换处理(无法批量更新,写法记录)
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- dreamweaver中用正则表达式查找替换批量删除 tppabs标签的方法 一步到位 .
- 使用ibatis时 sql中 in 的参数赋值
- replace MYSQL字符替换函数sql语句分享(正则判断)
- IBatis SqlParameter参数数量超过2100报错
- Spring和ibatis之间的十种常用的dao注入方式
- replace MYSQL字符替换函数sql语句分享(正则判断)