關於mybatis中llike模糊查詢中引數問題

2022-05-10 06:42:10 字數 2086 閱讀 8081

**

在mybatis中經常要寫到like 查詢,以前從來沒有遇到什麼問題,突然遇到乙個問題,找了好長時間沒找到,最後找到了,是關於#和$的使用的,總結如下:

name like  表示式    and    falg=#

本次示例中共兩個條件,乙個是name  like  表示式, 還有flag相等,這個是使用#{}佔位符,沒有任何問題,關鍵問題就是 表示式的書寫.下面來研究下表示式的書寫:

如果寫成'%#%' ,就會報錯parameter index out of range (2> number of parameters, which is 1). 這個錯誤,就是引數的問題,所以就查閱了一下資料,然後結合自己的實踐,得到總結如下:

本次使用 mysql 5.5.27和mybatis3.2.7進行測試

1.表示式: name like"%"#"%"

==>  preparing: select * from bbs_brand where namelike"%"?"%"and falg=? limit 0 , 10

==>parameters: 蓮(string), 1(integer)

能夠查詢出來,沒有問題,這是使用了佔位符來佔位,寫成sql就是: name like "%"'蓮'"%"沒有問題

2.表示式: name like '%$%'

preparing:select count(0) from (select * from bbs_brand where name like'%蓮%' and falg=?) as total

parameters: 1(integer)

使用$進行字串的拼接,直接把傳入的值,拼接上去了,沒有任何問題

3. 表示式: name likeconcat(concat('%',#),'%')

==>  preparing: select count(0) from (select *from bbs_brand where name like

concat(concat('%',?),'%') and falg=?) as total

==>parameters: 蓮(string), 1(integer)

這是使用了cancat進行字串的連線,同時使用了#進行佔位

轉換成sql就是: name like concat(concat('%','蓮'),'%')

3. 表示式:name like concat('%','$','%')

==>  preparing: select count(0) from (select *from bbs_brand where name likeconcat('%','蓮','%') and falg=?) astotal

==>parameters: 1(integer)

對上面的表示式進行了簡化,更方便了

4. 表示式:name like '%'||#||'%'

這個不能滿足要求,直接把資料庫中的所有資料查詢出來了,不符合我的要求,在mysql中||代表是or的意思

==>  preparing: select count(0) from (select *from bbs_brand where name like'%'||?||'%' and falg=?) as total

==>parameters: 蓮(string), 1(integer)

關於$和#使用的第二個問題:

介面中方法:void deletebrandbyids(@param("ids")string  ids);

xml中:

update bbs_brand set is_display=0 where id in ($)

這裡只能夠使用$ 進行字串的拼接,而不是#.

當我們傳入的字串是1,3,5,7的時候,用#只能刪除id為1的品牌,其他的就不能刪除了,這是因為,使用了#,就是乙個佔位符了,經過編譯後是

where id in(?)   加入字串後是 where id in('1,3,5,7') 這種,在sql中就只會刪除乙個,我們來看sql的執行效果

也是只是刪除一條記錄的,

所以如果想使用#,請在xml中使用動態的sql,,傳遞的引數使用list來進行迴圈遍歷.

mybatis中關於example類詳解

這幾天剛接觸example,很多內容都是破碎的,寫一篇博文加深理解。一 什麼是example類 mybatis generator會為每個字段產生如上的criterion,如果表的字段比較多,產生的example類會十分龐大。理論上通過example類可以構造你想到的任何篩選條件。在mybatis ...

mybatis中關於example類詳解

一 什麼是example類 mybatis generator會為每個字段產生如上的criterion,如果表的字段比較多,產生的example類會十分龐大。理論上通過example類可以構造你想到的任何篩選條件。在mybatis generator中加以配置,配置資料表的生成操作就可以自動生成ex...

關於Mybatis中的幾個常用標籤

1.propertiesresource jdbcconfig.properties properties一般都被用來引入外部配置檔案,然後讀取,當然,引入的配置檔案裡的內容一定要是按照鍵值對的形式儲存的。下面看看怎麼讀取吧!name driver value name url value name...