我們時長在批量插入時,需要獲取插入數據的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
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END