云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

iBatis动态Sql解决In子句的替代方法

Posted on 2008-01-02 20:48 云自无心水自闲 阅读(8570) 评论(3)  编辑  收藏 所属分类: Java心得体会

在iBatis中,对于in子句的标准做法是采用动态sql来解决的。具体方法大致是:Java代码传入一个List或者数组,然后在sqlMapConfig映射中使用iterate循环取这个变量,动态地生成sql语句。
这个标准解法的缺点是,使用起来比较麻烦
1. 需要在sqlMapConfig中使用动态语句
2. 需要传入一个Iterable的变量
对于这个问题,我使用了一个偷懒的办法,就是使用$标记。
在iBatis中,普通的变量,比如:v,是使用#号,在这个例子中,就是:#v#。
这样,iBatis会使用prepareStatement,并对变量进行变量绑定。
而$符号是简单替代的用法,在数据库的执行效率上要比前一种差。但优点就是简单方便。
比如:
SELECT * FROM  emp WHERE emp_no in ($empString$);
而empString的值就是1, 2, 3. 在Log中,可以看到,Sql语句就是:SELECT * FROM emp WHERE emp_no in (1,2,3)


评论

# re: iBatis动态Sql解决In子句的替代方法  回复  更多评论   

2008-04-08 01:45 by jarit
用$等于连接SQL,不好,还要解决敏感字符问题

# re: iBatis动态Sql解决In子句的替代方法  回复  更多评论   

2009-12-17 21:49 by 团派家园
3.0比2.0更好了。

# re: iBatis动态Sql解决In子句的替代方法  回复  更多评论   

2010-11-10 16:25 by 陈于喆
小心sql注入

只有注册用户登录后才能发表评论。


网站导航: