1、哪三种执行器
package org.apache.ibatis.session;
public enum ExecutorType {
SIMPLE, //默认
REUSE, //复用
BATCH; //批量
private ExecutorType() {
}
}
从枚举类ExecutorType可以看出三种执行器;
第一个问题:为什么枚举类必须私有化构造器?
- 唯一性:防止实例化造成命名冲突,统一由JVM加载的时候,实例化枚举对象
- 将枚举类设计成单例,因为他的值是固定的,不需要发生改变
2、三种执行器分别干什么
- SIMPLE:
默认执行器,对sql语句进行预编译、设置参数、执行等操作 - REUSE:
复用执行器,执行器会重用预处理语句(PreparedStatement) - BATCH:
批量执行器,不仅重用预处理语句,还批量处理
3、三种执行器怎么指定
使用mybatis会创建封装了sql操作的sqlSession对象
//指定SIMPLE
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.SIMPLE);
--------------------------------------------------------------------------
//指定REUSE
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.REUSE);
--------------------------------------------------------------------------
//指定BATCH
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
//BATCH批量操作需要自动提交
sqlSession.commit();
4、三种执行器各自优势
第二个问题:插入100条相同格式数据(同一条sql语句),三种执行器执行特色?
减少码字:
这里定义表格中”操作“代表”预编译、设置sql语句参数、执行sql插入操作“
执行器 | 特色 |
---|---|
SIMPLE | 每次插入都会执行”操作“中所有操作 |
REUSE | 第一次插入会执行”操作“中的预编译,然后每步都要执行”操作“中的赋值与插入 |
BATCH | 第一次插入会执行”操作“中的预编译,每步只用执行”操作“中的赋值,最后统一执行 |