批量插入数据推荐写法

SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
    
    
    session.insert("insertStatement", model);
}
session.flushStatements();

与默认的 ExecutorType.SIMPLE 不同,该语句将准备一次并为每条要插入的记录执行。

从资料中明白,默认执行器类型简单,会为每次创作创造一个新的预设语句,也就是创建一个新的语句。 MyBatis 存在的语句,无法采用,那么在每次调用方法时,都会重新解析sql语句。
所以,非要使用foreach的方式来进行插入的话,可以考虑减少一次插入中值的个数,最好能达到最底部的值,如果能成功的话。以前插20~50行数量是比较合适的,时间消耗也能接受。
#mybatis 推荐

SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
    
    
    SimpleTableMapper mapper = session.getMapper(SimpleTableMapper.class);
    List<SimpleTableRecord> records = getRecordsToInsert(); // not shown
 
    BatchInsert<SimpleTableRecord> batchInsert = insert(records)
            .into(simpleTable)
            .map(id).toProperty("id")
            .map(firstName).toProperty("firstName")
            .map(lastName).toProperty("lastName")
            .map(birthDate).toProperty("birthDate")
            .map(employed).toProperty("employed")
            .map(occupation).toProperty("occupation")
            .build()
            .render(RenderingStrategy.MYBATIS3);
 
    batchInsert.insertStatements().stream().forEach(mapper::insert);
 
    session.commit();
} finally {
    
    
    session.close();
}

经过试验,使用了ExecutorType.BATCH的插入方式,性能显着提升,不到2s便能全部插入完成。

总结一下,如果MyBatis需要进行批量插入,推荐使用ExecutorType。BATCH的插入方式,如果非要使用的插入时间,需要每次插入的记录控制在20~50左右。


-END-

如果你喜欢我的分享,欢迎关注微信公众号 java学长分享技术干货!

悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!

Guess you like

Origin blog.csdn.net/jiarui_mama/article/details/121449364