來簡書有一段時間晓折,但一直沒在這里寫過什么惑朦,且算是開門篇吧。源于項目中遇到的一些情況漓概,在作數(shù)據(jù)批量處理的時候漾月,希望向mybatis傳入一組數(shù)據(jù)的ID作為參數(shù)進行數(shù)據(jù)庫操作。關(guān)于這些方法網(wǎng)上博客等流傳的太多太多了胃珍,雖然大體都差不多梁肿,但是在我這里反而運行經(jīng)常報錯(可能是版本問題),經(jīng)過一番理解觅彰,終于達到了想要的效果吩蔑,所以在此有必要記錄下來。
先上代碼
//在dao類里面
int deleteBatchQuestion(@Param(value = "questionID") List<Integer> questionID);
//在xml里面
<delete id="deleteBatchQuestion" parameterType="java.util.List">
DELETE from single_question where
Single_QuestionID
<foreach collection="questionID" item="Single_QuestionID"
index="index" open="in(" close=")" separator=",">
#{questionID[${index}]}
</foreach>
</delete>
這里用到了mybatis的foreach元素填抬,該元素下有 collection烛芬、item、index飒责、open赘娄、close、separator六個屬性宏蛉。其中collection中要寫方法聲明里@Param中注解的名字(網(wǎng)上很多版本都說可以直接用list表示同時去掉注解遣臼,但我沒有成功)。其他六種屬性看名字就很好理解了檐晕。整條語句會在拼接成 DELETE from single_question where Single_QuestionID IN
(1,2,3...) 類似與這樣的語句暑诸。其實在Spring接管mybatis之后,每一條sql命令執(zhí)行前都會對sql進行拼接辟灰,然后再去執(zhí)行个榕。可以使用IDEA自帶的反編譯工具就可以直接調(diào)整sql執(zhí)行的整個過程(可能過程比較無聊芥喇,但誰讓咱做程序員來西采,多看源碼還是很有幫助滴。继控。械馆。。)
這里再說一下和不一樣的地方就是
#{questionID[${index}]}
這個地方要寫成這樣武通,網(wǎng)上很多人這么寫 {questionID} 但我沒有成功過霹崎。。冶忱。尾菇。。。派诬。(加上index更好理解一些)
ps. 容我吐槽一下劳淆,第一次用MarkDown,趕腳好不適應(yīng)。畢業(yè)新人一枚默赂,附https://www.cnblogs.com/luckyQi/沛鸵,請多多包含~~嘿嘿