论坛首页 入门技术论坛

ibatis模糊查询

浏览 4321 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-05-27  

为了防止SQL注入,ibatis使用模糊查询时也要避免使用$$来进行传值.下面是三个不同数据库的ibatis的模糊查询传值

 

mysql: select * from stu where name like concat('%',#name #,'%')

oracle: select * from stu where name like '%'||#name #||'%'

SQL Server:select * from stu where name like '%'+#name #+'% 这个还没测试

   发表时间:2009-05-29  
用函数,不用like,比如oracle用instr(field,?)>0
0 请登录后投票
   发表时间:2009-05-29  
用函数的速度应该要慢些!
0 请登录后投票
   发表时间:2009-05-29  
mmwy 写道
用函数,不用like,比如oracle用instr(field,?)>0

吧!!!!!!!
0 请登录后投票
   发表时间:2009-05-31  
j2ee_yohn 写道
用函数的速度应该要慢些!


在自己的一张表上用两条sql做了个查询计划
select * from t_user where loginname like '%x%'
select * from t_user where instr(loginname,'x')>0
从查询计划上来看,都是一样的table access full,cost也都一致,没有明显的区别。

就算是慢,用函数也只是毫不足道的慢,根本不会有明显的感觉,或者是有量级的区别,但是,用函数代替like,从此不用为sql注入担心,值不得么?

另:据说oracle有个function index,如果你这个检索使用比较频繁,那就专门做做索引优化一下,还会慢吗?
0 请登录后投票
   发表时间:2009-06-01  
select * from stu where name like % $name$ %
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics