myBatis官方对参数"defaultExecutorType"是这样说明的:
有这样三种执行器, SIMPLE是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新。
那么应该可理解为:
设为"SIMPLE", 在执行bookDao.save(book)时,就至关于JDBC的stmt.execute(sql);
设为"REUSE", 在执行bookDao.save(book)时,至关于JDBC重用一条sql,再经过stmt传入多项参数值,而后执行stmt.executeUpdate()或stmt.executeBatch();
设为"BATCH", 在执行bookDao.save(book)时,至关于JDBC语句的 stmt.addBatch(sql),即仅仅是将执行SQL加入到批量计划。 因此此时不会抛出主键冲突等运行时异常,而只有临近commit前执行stmt.execteBatch()后才会抛出异常。sql
除此以外,还有一个CacheExecutor,它有一个重要属性delegate,保存的是某类普通的Executor,值在构照时传入。执行数据库update操做时,它直接调用delegate的update方法,执行query方法时先尝试从cache中取值(其实现是org.apache.ibatis.cache.decorators.TransactionalCache,二级缓存),取不到再调用delegate的查询方法,并将查询结果存入cache中。数据库