2015-02-24 59 views
0

我在*Dao.java文件一串SQL的,看起來有點像MyBatis的SQL變量語法:什麼是文字

select * from table where id = #{id}; 

它工作正常,如果我要的是1分的記錄,其中ID是一個i​​nt。但是,我想要寫如下語句:

select * from table where id in (#{idList}); 

如何更改#{idList}以便列表(這是通過在作爲級聯ID的字符串)將不會在實際的SQL語句引號包裹那結果?

眼下生成的SQL是這樣的:

select * from table where id in ('1,2,3,4,5'); 

,我想它是

select * from table where id in (1,2,3,4,5); 

回答

1

MyBatis的使用${variable}支持文字。對於你的情況,SQL可能如下。

select * from table where id in (${idList}) 

但是要記住,${}無法阻止sql injection如果你可以確保sql injection不適合你的情況,那很好。

另一種方法是使用foreach支持inMyBatis 3關閉。細節請參考http://mybatis.github.io/mybatis-3/dynamic-sql.html#foreach

對於您的情況下,SQL可能是:

select * from table where id in 
<foreach item="item" index="index" collection="list" 
    open="(" separator="," close=")"> 
    #{item} 
</foreach> 

,參數類型是List,但不是級聯ID的字符串。

+0

謝謝。正是我需要的。 – kasdega 2015-02-24 15:28:52