mybatis批量插入
阿新 • • 發佈:2021-12-13
一、在mybatis中ExecutorType的使用
1、Mybatis內建的ExecutorType有3種,預設的是simple,該模式下它為每個語句的執行建立一個新的預處理語句,單條提交sql;而batch模式重複使用已經預處理的語句,
並且批量執行所有更新語句,顯然batch效能將更優;
2、但batch模式也有自己的問題,比如在Insert操作時,在事務沒有提交之前,是沒有辦法獲取到自增的id,這在某型情形下是不符合業務要求的;
一、程式碼實現
1、注入SqlSessionFactory
@Autowired private SqlSessionFactory sqlSessionFactory;
2、實現
try(SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);) { SysUserMapper mapper = sqlSession.getMapper(SysUserMapper.class); long start = System.currentTimeMillis(); list.stream().forEach(u->mapper.insertTest(u)); sqlSession.flushStatements(); sqlSession.commit();long end = System.currentTimeMillis(); System.err.println((end-start)/1000); }
備註:sqlSession.flushStatements()方法的作用就是將前面所有執行過的INSERT、UPDATE、DELETE語句真正重新整理到資料庫中。底層呼叫了JDBC的statement.executeBatch
方法。
sqlSession.commit()方法提交事務