Mybatis 如何批量刪除數(shù)據(jù)的實現(xiàn)示例
本期以最常用的根據(jù)id批量刪除數(shù)據(jù)為例:
接口設(shè)計1:List類型單參數(shù)
Integer deleteByIds(List<Integer> ids);
接口設(shè)計2:Array數(shù)組類型單參數(shù)
Integer deleteByIds(Integer[] ids);
接口設(shè)計3:可變長度參數(shù)
Integer deleteByIds(Integer... ids);
此以接口2為例子mapper.xml配置如下:
<delete id='deleteByIds'> DELETE FROM t_user WHERE id IN ( <foreach collection='array' item='id' separator=','> #{id} </foreach> )</delete>
關(guān)于<foreach>節(jié)點的配置說明:
collection:需要被遍歷的對象,當抽象方法的參數(shù)只有1個且沒有添加@Param注解時,如果參數(shù)類型是List集合,則取值為list,如果參數(shù)類型是數(shù)組,則取值為array;當抽象方法的參數(shù)超過1個,就一定添加了@Param注解,則取值為@Param注解配置的參數(shù)值;
如下圖接口所示:
item:遍歷過程中的每一個元素數(shù)據(jù),當前屬性可以自定義值表示元素數(shù)據(jù)的名稱,在<foreach>節(jié)點的子級,使用#{}占位符時,就可以使用這個名稱來表示數(shù)據(jù);
separator:遍歷生成的代碼片段中,各元素數(shù)據(jù)之間的分隔符號;
open / close:遍歷生成的代碼片段的最左側(cè)字符串/最右側(cè)字符串。
補充知識點:關(guān)于#{}和${}格式的占位符MyBatis允許在配置SQL語句時使用#{}和${}這2種格式的占位符來表示參數(shù)值。
簡單原則:在原本使用JDBC技術(shù)編程時,編寫SQL語句時可以寫問號(?)的位置,都使用#{}格式的占位符,不可以寫問號的位置,必須使用${}格式的占位符!
使用#{}格式的占位符,只能表示某個值!MyBatis在處理時,會通過預(yù)編譯的方式進行處理,即:先使用問號對占位符表示的值進行占位,并將整個SQL語句交由MySQL進行編譯相關(guān)的處理(包括詞法分析、語義分析、編譯),當編譯完成后,再將值代入到編譯成功的SQL語句中一并執(zhí)行。簡單來說,使用#{}格式的占位符時,最終處理機制是使用了預(yù)編譯的!所以,使用這種格式的占位符時,在編寫SQL時不需要關(guān)心值的數(shù)據(jù)類型的問題,并且,不存在SQL注入的風(fēng)險!
使用${}格式的占位符,可以表示SQL語句中的任意片段!MyBatis在處理時,會先將${}格式占位符對應(yīng)的值拼接到SQL語句中,然后再將SQL語句交由MySQL進行編譯相關(guān)處理,也就是說,${}格式占位符的值在編譯之前就已經(jīng)代入到SQL語句中了!很顯然,在處理${}格式的占位符時,沒有(也不可能)使用預(yù)編譯!所以,使用這種格式的占位符時,需要自行在SQL語句中考慮數(shù)據(jù)類型的問題,例如字符串類型的值需要使用一對單引號框住!另外,還存在SQL注入的風(fēng)險!
到此這篇關(guān)于Mybatis 如何批量刪除數(shù)據(jù)的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis 批量刪除數(shù)據(jù)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Window7安裝MariaDB數(shù)據(jù)庫及系統(tǒng)初始化操作分析2. MariaDB的安裝與配置教程3. SQLite教程(十二):鎖和并發(fā)控制詳解4. Centos7 下mysql重新啟動MariaDB篇5. MariaDB性能調(diào)優(yōu)工具mytop的使用詳解6. centos 7安裝mysql5.5和安裝 mariadb使用的命令7. access不能打開注冊表關(guān)鍵字錯誤處理方法(80004005錯誤)8. SQL案例學(xué)習(xí)之字符串的合并與拆分方法總結(jié)9. SQLite 性能優(yōu)化實例分享10. MariaDB數(shù)據(jù)庫的外鍵約束實例詳解
