我們時長在批量插入時,需要獲取插入數據的id. 這樣: 這樣是沒問題的. 但是有時候牽扯到批量插入,並且獲取插入的id 這樣寫: 這樣運行後就會出現異常了. 這是因為你用的mybatis版本過低.比如我用的是3.2.2版本,這是mybatis的一個bug. 如果你換成3.4.4版本就沒有問題了. 上 ...
我們時長在批量插入時,需要獲取插入數據的id.
這樣:
<insert id="insertUser" parameterType="gys.entity.User" keyProperty="userId" useGeneratedKeys="true"> INSERT INTO `user` (userName) VALUES (#{userName}) </insert>
這樣是沒問題的.
但是有時候牽扯到批量插入,並且獲取插入的id
這樣寫:
<insert id="insertUserBatch1" keyProperty="userId" useGeneratedKeys="true"> INSERT INTO `user` (userName) VALUES <foreach collection="list" separator="," item="item"> (#{item.userName}) </foreach> </insert>
這樣運行後就會出現異常了.
這是因為你用的mybatis版本過低.比如我用的是3.2.2版本,這是mybatis的一個bug.
如果你換成3.4.4版本就沒有問題了.
上面的sql語句換個寫法 就又會報異常了(將insert包圍在foreach裡面)
比如:
<insert id="insertUserBatch2"> <foreach collection="list" separator=";" item="item"> INSERT INTO `user` (userName) VALUES (#{item.userName}) </foreach> </insert>
同理還有update的批量更新也是有這個問題
<update id="updateUserBatch"> <foreach collection="list" item="item" separator=";"> update `user` set userName=#{item.userName} where userId=#{item.userId} </foreach> </update>
這是因為mybatis預設是只能執行一條sql語句,
可以再鏈接路徑的時候加上參數,就可以執行多條sql語句了.allowMultiQueries=true
jdbc:mysql://127.0.0.1:3306/book?allowMultiQueries=true