MyBatis一个映射发送多条SQL遇到的问题

在做批量更新的时候,我们可以知道经常是用mybatis动态sql拼接多条sql语句,如:

    <update id="alterStudentDormBatch" parameterType="Map">
        <foreach collection="stuDormMap" index="stuId" item="newDorm" separator=";"> UPDATE student <set> stu_dorm=#{newDorm} </set> WHERE stu_id=#{stuId} </foreach>
    </update>

然而却一直报错,sql语句显然没有问题,在调试的时候发现第一个map传给数据库没有问题,而后面的map都没有传入,怀疑是数据库的只接受了第一个update的sql语句。

后来发现,原来mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可,即可一次性发送多个sql语句(batch)。

 

以上是批量更新的问题,其实还可以再优化,通过case…when…then..来拼接一条sql发送。