场合:
正常情况下:
List<RmaOrderDetailSn> all = IterableUtils.toList(rmaOrderDetailSnRepository.findAll());
all.forEach(d->d.setHasReturnFlag(Boolean.FALSE));
OrderRepository.save(all);
速度比较慢估计得5分钟
优化:
@Modifying
@Query(value = "UPDATE **set retrunFlag= 0",nativeQuery = true)
int updateRetrunFlagAll();
OrderRepository.updateRetrunFlagAll();
只需要2秒
注意:
- 方法的返回值应该是 int,表示更新语句所影响的行数
- 在调用的地方必须加事务,没有事务不能正常执行
有nativeQuery = true时,是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中。
没有nativeQuery = true时,就不是原生sql,而其中的select * from 的xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名。