You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot中获取Repository更新操作的受影响行数

获取Spring Boot原生更新查询的受影响行数

要获取这个原生更新查询的受影响行数,只需按以下步骤调整代码:

1. 修改Repository方法的返回类型

将原方法的返回值从void改为int(或Integer),JPA的@Modifying注解在执行UPDATE/DELETE语句时,默认会返回执行后受影响的行数。修改后的代码如下:

@Modifying(clearAutomatically = true)
@Transactional
@Query(nativeQuery = true, value = "UPDATE tb_pessoal_funcionarios SET salario = CAST(salario+(salario * :percentualAumento)/100 AS NUMERIC(18,2)) "
                  + "WHERE id IN (:funcionarioId) "
                      + "AND (:alterarFuncionariosDemitidos IS true OR condicao <> 'Inativo')")
int AlterarSalarioSelecionadosPorPercentual(Double percentualAumento, Long funcionarioId, Boolean alterarFuncionariosDemitidos);

2. 在Service层调用并接收返回值

在业务逻辑层直接调用Repository的方法,就能拿到受影响行数,示例代码:

@Service
public class FuncionarioService {
    private final FuncionarioRepository funcionarioRepository;

    public FuncionarioService(FuncionarioRepository funcionarioRepository) {
        this.funcionarioRepository = funcionarioRepository;
    }

    public int atualizarSalarioPorPercentual(Double percentualAumento, Long funcionarioId, Boolean alterarDemitidos) {
        return funcionarioRepository.AlterarSalarioSelecionadosPorPercentual(percentualAumento, funcionarioId, alterarDemitidos);
    }
}

3. 在Controller层使用返回值

Controller调用Service方法获取行数后,可根据业务需求返回响应或做其他处理:

@RestController
@RequestMapping("/funcionarios")
public class FuncionarioController {
    private final FuncionarioService funcionarioService;

    public FuncionarioController(FuncionarioService funcionarioService) {
        this.funcionarioService = funcionarioService;
    }

    @PutMapping("/salario/aumento")
    public ResponseEntity<String> atualizarSalario(@RequestParam Double percentualAumento,
                                                  @RequestParam Long funcionarioId,
                                                  @RequestParam Boolean alterarDemitidos) {
        int linhasAfetadas = funcionarioService.atualizarSalarioPorPercentual(percentualAumento, funcionarioId, alterarDemitidos);
        return ResponseEntity.ok("成功更新 " + linhasAfetadas + " 条员工薪资记录");
    }
}

注意事项

  • @Transactional注解:可根据业务场景决定放在Repository或Service层,确保事务覆盖完整的业务逻辑。
  • clearAutomatically = true:该配置会在查询执行后清空EntityManager缓存,避免后续查询获取到未更新的脏数据。
  • 参数绑定:确保方法参数名与@Query中定义的:参数名完全匹配,避免参数绑定失败。

内容的提问来源于stack exchange,提问作者Gabryel Frk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:45:36