現象:批量操作的mapper映射文件形如
<!-- 測試執行多行語句 --> <update id="updateLogs"> UPDATE `sys_log` SET `symbol` = '測試模塊1' WHERE `log_id` = '02c821e3b61bd0199e162b4e3a60275a'; UPDATE `sys_log` SET `symbol` = '測試模塊2' WHERE `log_id` = '09ef12e0072136b822e1e6265d139c8c'; UPDATE `sys_log` SET `symbol` = '測試模塊3' WHERE `log_id` = '17f8f203b2d834d8b6b500a46d9a9643'; </update>
分析:細看配置文件,也沒發現有啥問題,把配置文件中的sql語句拿到mysql中執行也沒問題,但是就是在程序執行到這里的時候,拋出org.springframework.jdbc.BadSqlGrammarException異常,這種問題不太好定位,只能猜測是Mybatis框架對批量操作有特殊要求。
方案:經過查閱得出,用Mybatis批量操作必須加上參數&allowMultiQueries=true(參數的含義:可以在sql語句后攜帶分號,實現多語句執行;可以執行批處理,同時發出多個SQL語句),這樣問題就解決了。