批量操作介绍
批量操作造用于大量数据需要插入或更新到数据库的业务场景。
优点:
- 是真正的批量插入,指更新。实现真的批量插入和更新,高性能,适合各种数据库。
- 避免了在 for 循环中执行 SQL 性能不佳。
- 底层使用的是预编译后的SQL语句(preparestatement),执行效率高。是一个整体事务。
选用于当有大批量数据需要插入或更新时的业务场景,优点:发送的是预编译后的SQL语句,执行效率高。是一个整体事务。
- 批量执行insert、update的基础方法
- 底层使用preparestatement,实现的真的批量插入和更新,高性能,适合各种数据库
- 若使用oracle数据库,oracle jdbc驱动版本不能低于ojdbc6 - 12.1.0.2,否则批量插入无法运行。
- xxxSelective方法,是只把非空的值更到对应的字段,会引起每一条preparestatement语句的参数数量是变化的,SQL语句是变化的.
- Mybatis容错式的解决了这个问题,每当preparestatement语句的SQL变化时,就执行新的SQL语句,这保证了功能的正确性,稍影响性能。
- 所以,请你按常规套路来使用batch,可收到最佳效果。
- 常规套路是:如一批SQL有100条,每一条preparestatement语句的参数数量应是一致,SQL语句是不变化的,只有参数的值是可以变的。
4 个批量操作方法
Service 层增加的 6 个方法,其中 4 个用于批量操作。
方法名 | 说明 | 批量 |
---|---|---|
insertBatch | 批量插入 | 批量 |
insertSelectiveBatch | 批量insert,只把非空的值更到对应的字段 | 批量 |
updateBatch | 批量update | 批量 |
updateSelectiveBatch | 批量update,只把非空的值更到对应的字段 | 批量 |
selectOne(T entity) | 获取单条数据 |
|
insertOrUpdate(T entity) | 插入或更新数据 |
|
注意1:
- 若使用oracle数据库,oracle jdbc驱动版本不能低于ojdbc6 - 12.1.0.2,否则批量插入无法运行。
注意2:
- 常规的用法是:如要批量执行100条SQL,希望 每一条语句的参数的数量应是一致的(参数的值是可以变的),这样preparestatement SQL语句是不变化的,性能最优。
- 如要批量执行100条SQL, 它们参数的数量是变化的。 会引起每一条preparestatement语句的参数数量是变化的,SQL语句是变化的。
- Mybatis容错式的解决了这个问题,每当preparestatement语句的SQL变化时,就执行新的SQL语句,这保证了功能的正确性。