巧用正则批量替换IBATIS中的sql参数注入方式

        最近发现如果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();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值