溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iBATIS如何使用$和#

發(fā)布時(shí)間:2021-11-03 13:39:09 來(lái)源:億速云 閱讀:246 作者:小新 欄目:編程語(yǔ)言

這篇文章主要為大家展示了“iBATIS如何使用$和#”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“iBATIS如何使用$和#”這篇文章吧。

我們?cè)谑褂胕BATIS時(shí)會(huì)經(jīng)常用到#這個(gè)符號(hào)。

比如:

sql 代碼

select * from member where id =#id#

然后,我們會(huì)在程序中給id這個(gè)變量傳遞一個(gè)值,iBATIS會(huì)自動(dòng)將#id#轉(zhuǎn)成我們傳遞的內(nèi)容。

但是我最近碰到一個(gè)奇怪的問(wèn)題。我在批量刪除或修改的時(shí)候,居然SQL失效了。

SQL如下:

sql 代碼

update user set flag=#flag# where id in (#id#)      delete from user where id in (#id#)

傳遞的id為1,2,3。但是數(shù)據(jù)卻沒(méi)有任何的修改。

后來(lái)查找了半天,原來(lái)原因就是這個(gè)#的問(wèn)題。因?yàn)閕BATIS默認(rèn)會(huì)把“#”中間的變量作為字符串來(lái)處理。這樣,就會(huì)出現(xiàn)這樣的SQL


sql 代碼

update user set flag='1' where id in ('1,2,3')          delete from user where id in ('1,2,3')

這樣的SQL數(shù)據(jù)庫(kù)當(dāng)然是不會(huì)執(zhí)行的。那我們只有繞開(kāi)iBATIS了嗎?

其實(shí)不用,iBATIS其實(shí)還提供了另外一種方式,那就是使用$來(lái)傳遞值。你使用$將你的變量括起來(lái),iBATIS不會(huì)給這個(gè)變量做任何的處理,直接生成你要的SQL

SQL代碼

update user set flag=$flag$ where id in ($id$)      update user set flag=1  where id in (1,2,3)      delete from user where id in ($id$)   delete from user where id in (1,2,3)

還可以用ibatis的iterate解決:

SQL:

﹤select id="test" parameterClass="java.util.List" resultClass="test.Roadline"﹥          select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in           ﹤iterate open="(" close=")" conjunction=","﹥              #value[]#          ﹤/iterate﹥      ﹤/select﹥
List list = new ArrayList();      list.add("aaa");      list.add("bbb");                        List rsList = sqlMap.queryForList("roadline.test", list);

生成的SQL:

select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in (?,?)

$中間的變量就是直接替換成值的

#會(huì)根據(jù)變量的類型來(lái)進(jìn)行替換

比如articleTitle的類型是string, 值是"標(biāo)題"的時(shí)候

$articleTitle$ = 標(biāo)題

#articleTitle# = '標(biāo)題'

如果一個(gè)字段的名字不規(guī)范帶有#,那么在﹤select ...﹥ select name# from reader where id=#id#...﹤/select﹥語(yǔ)句中會(huì)報(bào)錯(cuò),我看過(guò)有人問(wèn)過(guò)這個(gè)問(wèn)題,說(shuō)是name####但是還是不能解決無(wú)法對(duì)帶#的字段的查詢。 解決辦法肯定是有的。比如,你可以把這個(gè)字段當(dāng)做一個(gè)參數(shù)來(lái)傳遞給ibatis。然后用$$把這個(gè)變量括起來(lái)。

以上是“iBATIS如何使用$和#”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI