最近项目有一个场景需要执行大批量的插入,一条条的执行肯定会很慢,然后把原来的逻辑改为批量插入,但是执行saveBatch()的时候返回uncategorized SQLException; SQL state [null]; error code [0]; 必须执行该语句才能获得结果。这是因为mybatis-plus批量插入的时候SQL server自增主键没有回填造成的。
解决办法,不需要用到主键的批量插入可以改用xml的方法
void insertBatch(List<User> list);
<insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (user_name,phone,create_time) VALUES
<foreach collection="list" separator="," item="item">
(#{item.userName},#{item.phone},#{item.createTime})
</foreach>
</insert>
这种方式可以写入成功。
如果是多张表在同一个事务中的关联插入,这种需要主键的回填,上边的方法只会回填最后一条数据。接下来的插入都会出错。这种插入只适用最后插入的那张表,其他表还是只能一条一条的插入,暂时还没有想到什么好的办法。