1. 程式人生 > >mybatis批量插入報錯:','附近有錯誤

mybatis批量插入報錯:','附近有錯誤

mybatis批量插入的時候報錯,報錯資訊‘,’附近有錯誤
這裡寫圖片描述
mapper.xml的寫法為

<insert id="insertByBatch">
        INSERT INTO USER_LOG (USER_ID, OP_TYPE, CONTENT, IP, OP_ID, OP_TIME) VALUES 
        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
            (#{rateId}, #{opType}, #{content}, #{ipStr}, #{userId}, #{opTime},
        </foreach
>
</insert>

列印的sql語句

INSERT INTO USER_LOG (USER_ID, OP_TYPE, CONTENT, IP, OP_ID, OP_TIME) VALUES     (   
   (?, ?, ?, ?, ?, ?)       ,     (?, ?, ?, ?, ?, ?)        )

除錯的時候還是把sql複製到navicate中進行檢查,就報了上面的錯。這個錯看起來毫無頭緒,然後就自己重新寫insert語句,發現正確的語句應該為

INSERT INTO USER_LOG (USER_ID, OP_TYPE, CONTENT, IP, OP_ID, OP_TIME) VALUES
(?, ?, ?, ?, ?, ?) , (?, ?, ?, ?, ?, ?)

比之前的sql少了外面的括號,此時執行成功,所以mapper.xml中應該把opern=”(” close=”)”刪除即可。
多說一句,批量插入的時候也可以把要插入的資料組裝成List<實體>,這樣就不用傳這麼多的引數了。