如何在使用MyBatis ExecutorType.Batch进行批量插入操作时控制批量大小

时间:2013-03-12 06:22:27

标签: bulkinsert ibatis batch-processing mybatis batch-insert

我正在尝试使用mybatis批处理执行(ExecutorType.BATCH)支持。我想在数据库性能和可伸缩性方面批量插入几条记录。我想覆盖默认的Mybatis批量大小。我没有找到任何以编程方式配置批量大小的方法。有没有办法覆盖默认的批量大小?以下是供您参考的代码:

public static void BatchUsingMyBatis() throws Exception
    {
        Contact contact = new Contact();
        contact.setname("someone");
        contact.setphone("somephone");
        contact.setemail("someone@somedomain.com");

        ClassPathXmlApplicationContext appContext = 
                new ClassPathXmlApplicationContext("BeanConfiguration.xml");

        SqlSessionFactoryBean factoryBean = appContext.getBean(org.mybatis.spring.SqlSessionFactoryBean.class);
        SqlSessionFactory factory = factoryBean.getObject();
        SqlSession session = factory.openSession(ExecutorType.BATCH, false);

        session.insert ("ins", contact);
        session.insert ("ins", contact);
        session.insert ("ins", contact);
        session.insert ("ins", contact);
        session.insert ("ins", contact);

        session.commit();
    }

感谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的需求,并且您希望能够配置会话,以便一次提交将生成多个批量插入。例如,如果有可能设置一次发送最大的语句,那么您提供的代码将生成一个批量插入(一次三行)和另一个批量插入(一次两行)。 我找不到有关此类功能的信息,我相信没有这样的功能,但要实现此行为,您需要覆盖BatchExecutor doUpdate方法和Configuration newExecutor方法,以便它能够识别新的Executor类。