Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例
本期以最常用的根據(jù)id批量刪除數(shù)據(jù)為例:
接口設(shè)計(jì)1:List類型單參數(shù)
Integer deleteByIds(List<Integer> ids);
接口設(shè)計(jì)2:Array數(shù)組類型單參數(shù)
Integer deleteByIds(Integer[] ids);
接口設(shè)計(jì)3:可變長(zhǎng)度參數(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é)點(diǎn)的配置說(shuō)明:
collection:需要被遍歷的對(duì)象,當(dāng)抽象方法的參數(shù)只有1個(gè)且沒(méi)有添加@Param注解時(shí),如果參數(shù)類型是List集合,則取值為list,如果參數(shù)類型是數(shù)組,則取值為array;當(dāng)抽象方法的參數(shù)超過(guò)1個(gè),就一定添加了@Param注解,則取值為@Param注解配置的參數(shù)值;
如下圖接口所示:
item:遍歷過(guò)程中的每一個(gè)元素?cái)?shù)據(jù),當(dāng)前屬性可以自定義值表示元素?cái)?shù)據(jù)的名稱,在<foreach>節(jié)點(diǎn)的子級(jí),使用#{}占位符時(shí),就可以使用這個(gè)名稱來(lái)表示數(shù)據(jù);
separator:遍歷生成的代碼片段中,各元素?cái)?shù)據(jù)之間的分隔符號(hào);
open / close:遍歷生成的代碼片段的最左側(cè)字符串/最右側(cè)字符串。
補(bǔ)充知識(shí)點(diǎn):關(guān)于#{}和${}格式的占位符MyBatis允許在配置SQL語(yǔ)句時(shí)使用#{}和${}這2種格式的占位符來(lái)表示參數(shù)值。
簡(jiǎn)單原則:在原本使用JDBC技術(shù)編程時(shí),編寫(xiě)SQL語(yǔ)句時(shí)可以寫(xiě)問(wèn)號(hào)(?)的位置,都使用#{}格式的占位符,不可以寫(xiě)問(wèn)號(hào)的位置,必須使用${}格式的占位符!
使用#{}格式的占位符,只能表示某個(gè)值!MyBatis在處理時(shí),會(huì)通過(guò)預(yù)編譯的方式進(jìn)行處理,即:先使用問(wèn)號(hào)對(duì)占位符表示的值進(jìn)行占位,并將整個(gè)SQL語(yǔ)句交由MySQL進(jìn)行編譯相關(guān)的處理(包括詞法分析、語(yǔ)義分析、編譯),當(dāng)編譯完成后,再將值代入到編譯成功的SQL語(yǔ)句中一并執(zhí)行。簡(jiǎn)單來(lái)說(shuō),使用#{}格式的占位符時(shí),最終處理機(jī)制是使用了預(yù)編譯的!所以,使用這種格式的占位符時(shí),在編寫(xiě)SQL時(shí)不需要關(guān)心值的數(shù)據(jù)類型的問(wèn)題,并且,不存在SQL注入的風(fēng)險(xiǎn)!
使用${}格式的占位符,可以表示SQL語(yǔ)句中的任意片段!MyBatis在處理時(shí),會(huì)先將${}格式占位符對(duì)應(yīng)的值拼接到SQL語(yǔ)句中,然后再將SQL語(yǔ)句交由MySQL進(jìn)行編譯相關(guān)處理,也就是說(shuō),${}格式占位符的值在編譯之前就已經(jīng)代入到SQL語(yǔ)句中了!很顯然,在處理${}格式的占位符時(shí),沒(méi)有(也不可能)使用預(yù)編譯!所以,使用這種格式的占位符時(shí),需要自行在SQL語(yǔ)句中考慮數(shù)據(jù)類型的問(wèn)題,例如字符串類型的值需要使用一對(duì)單引號(hào)框住!另外,還存在SQL注入的風(fēng)險(xiǎn)!
到此這篇關(guān)于Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis 批量刪除數(shù)據(jù)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 如何正確的進(jìn)行Oracle數(shù)據(jù)庫(kù)性能完全保護(hù)2. ubuntu下使用SQLite3的基本命令3. 講解Oracle優(yōu)化器的優(yōu)化方式和優(yōu)化模式4. SQL SERVER – 檢測(cè)LOCK、終止會(huì)話 ID/UOW 的用戶進(jìn)程5. DB2 V9.5工作負(fù)載管理之工作負(fù)載管理簡(jiǎn)介6. 國(guó)內(nèi)學(xué)院派專家對(duì)DB2 9新產(chǎn)品贊不絕口7. SQLite教程(四):內(nèi)置函數(shù)8. MySQL存儲(chǔ)過(guò)程in、out和inout參數(shù)示例和總結(jié)9. 教你使用智能優(yōu)化器提高Oracle性能極限10. SQL Server數(shù)據(jù)庫(kù)的三種創(chuàng)建方法匯總
