批量操作介绍

批量操作造用于大量数据需要插入或更新到数据库的业务场景。

优点:

  • 是真正的批量插入,指更新。实现真的批量插入和更新,高性能,适合各种数据库。
  • 避免了在 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语句,这保证了功能的正确性。