mybatis批量插入


一、在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()方法提交事務



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM