mybatis执行器

mybatis执行器

​ 对数据库的批量操作, 是一个非常常见的操作, Mybatis提供了批量执行器, 来支持批量操作。常规对一条sql语句的执行需要经过编译,设置参数,执行SQL等三步,批量执行时,可以利用预编译方式来优化,可大大提高效率。

mybatis的执行器有三种

  1. ExecutorType.SIMPLE:这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement;

  2. ExecutorType.REUSE: REUSE 执行器会重用预处理语句;

  3. ExecutorType.BATCH: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作;

public class TestStudentMapper {

    // 批量保存方法
    private void batchSave(StudentMapper mapper) {

        // 初始化10000个对象
        List<StudentPO> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            list.add(new StudentPO("zhangsan_" + i, "M",20 + i % 10,  LocalDate.now()));
        }

        // 批量执行
        long start = System.currentTimeMillis();
        for (StudentPO studentPO : list) {
            mapper.save(studentPO);
        }
        long end = System.currentTimeMillis();

        // 输出执行耗时
        System.out.println("耗时:" + (end - start) + " ms!");
    }

    // 每次执行前,请空表
    @Before
    public void setUp(){
        StudentMapper studentMapper = SqlSessionUtil.getMapper(StudentMapper.class);
        studentMapper.clear();
    }

    // 默认执行器,用时21575ms
    @Test
    public void test_SIMPLE(){
        // 获取自动提交事务的Maper
        StudentMapper mapper = SqlSessionUtil.getMapperAutoTx(StudentMapper.class);
        // 执行批量保存
        batchSave(mapper);
    }

    // 重用预编译执行器,用时19322ms
    @Test
    public void test_REUSE(){
        // 获取批量保存sqlSession
        SqlSession sqlSession = SqlSessionUtil.openSession(ExecutorType.REUSE, true);

        // 获取Mapper 对象
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 执行批量保存
        batchSave(mapper);

    }

    // 批量执行器,用时835ms
    @Test
    public void test_BATCH(){
        // 获取批量保存sqlSession
        SqlSession sqlSession = SqlSessionUtil.openSession(ExecutorType.BATCH, true);

        // 获取Mapper 对象
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        // 执行批量保存
        batchSave(mapper);

        sqlSession.commit();
    }
}    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值