当然MyBatis 的动态标签的批量操作也是存在一定的缺点的,比如数据量特别大的时候,拼接出来的SQL 语句过大。
MySQL 的服务端对于接收的数据包有大小限制,max_allowed_packet 默认是4M,需要修改默认配置才可以解决这个问题。
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (7188967 >
4194304). You can change this value on the server by setting the max_allowed_packet' variable.
在我们的全局配置文件中, 可以配置默认的Executor 的类型。其中有一种BatchExecutor。
<setting name="defaultExecutorType" value="BATCH" />
也可以在创建会话的时候指定执行器类型:
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
BatchExecutor 底层是对JDBC ps.addBatch()的封装,原理是攒一批SQL 以后再发送(参考standalone - 单元测试目录JdbcTest.java – testJdbcBatch())。
问题:三种执行器的区别是什么?Simple、Reuse、Batch