批量操作
批量操作造用于大量数据需要插入或更新到数据库的业务场景。
优点:
- 是真正的批量插入,指更新。实现真的批量插入和更新,高性能,适合各种数据库。
- 避免了在 for 循环中执行 SQL 性能不佳。
- 底层使用的是预编译后的SQL语句(preparestatement),执行效率高。是一个整体事务。
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语句,这保证了功能的正确性。