千家信息网

Mybatis如何使用ExecutorType.BATCH

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要为大家展示了"Mybatis如何使用ExecutorType.BATCH",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Mybatis如何使用E
千家信息网最后更新 2025年01月23日Mybatis如何使用ExecutorType.BATCH

这篇文章主要为大家展示了"Mybatis如何使用ExecutorType.BATCH",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Mybatis如何使用ExecutorType.BATCH"这篇文章吧。

使用ExecutorType.BATCH

Mybatis内置的ExecutorType有3种,默认为simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优; 但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的

具体用法如下

//批量保存方法测试@Test  public void testBatch() throws IOException{    SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();    //可以执行批量操作的sqlSession    SqlSession openSession = sqlSessionFactory.openSession(ExecutorType.BATCH);    //批量保存执行前时间    long start = System.currentTimeMillis();    try {        EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);        for (int i = 0; i < 1000; i++) {            mapper.addEmp(new Employee(UUID.randomUUID().toString().substring(0, 5), "b", "1"));        }        openSession.commit();        long end = System.currentTimeMillis();        //批量保存执行后的时间        System.out.println("执行时长" + (end - start));        //批量 预编译sql一次==》设置参数==》10000次==》执行1次   677        //非批量  (预编译=设置参数=执行 )==》10000次   1121    } finally {        openSession.close();    }}

mapper和mapper.xml如下

public interface EmployeeMapper {       //批量保存员工    Long addEmp(Employee employee);}
            insert into employee(lastName,email,gender)        values(#{lastName},#{email},#{gender})    

以上是"Mybatis如何使用ExecutorType.BATCH"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0