来简书有一段时间,但一直没在这里写过什么,且算是开门篇吧。源于项目中遇到的一些情况,在作数据批量处理的时候,希望向mybatis传入一组数据的ID作为参数进行数据库操作。关于这些方法网上博客等流传的太多太多了,虽然大体都差不多,但是在我这里反而运行经常报错(可能是版本问题),经过一番理解,终于达到了想要的效果,所以在此有必要记录下来。
先上代码
//在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中注解的名字(网上很多版本都说可以直接用list表示同时去掉注解,但我没有成功)。其他六种属性看名字就很好理解了。整条语句会在拼接成 DELETE from single_question where Single_QuestionID IN
(1,2,3...) 类似与这样的语句。其实在Spring接管mybatis之后,每一条sql命令执行前都会对sql进行拼接,然后再去执行。可以使用IDEA自带的反编译工具就可以直接调整sql执行的整个过程(可能过程比较无聊,但谁让咱做程序员来,多看源码还是很有帮助滴。。。。)
这里再说一下和不一样的地方就是
#{questionID[${index}]}
这个地方要写成这样,网上很多人这么写 {questionID} 但我没有成功过。。。。。。。(加上index更好理解一些)
ps. 容我吐槽一下,第一次用MarkDown,赶脚好不适应。毕业新人一枚,附https://www.cnblogs.com/luckyQi/,请多多包含~~嘿嘿