Spring Boot直接执行传入的sql语句,同时校验sql,执行成功之后设置手动回滚

在执行Sql语句时,将整条Sql语句作为参数来执行,使用注解的方式在dao层使用如下:

@Select("${sql}")
List<LinkedHashMap<String,Object>> checkSql(@Param("sql") String sql);

在验证sql是否正确时,想通过执行sql来验证,当执行成功时,则sql正确,当执行sql失败时,则结果异常。当sql执行成功时,有时候会对数据造成影响,如更新,插入,删除操作,此时,需要使用回滚。

回滚的方式为在方法上加@Transactional注解,例子如下:

@ApiOperation("校验SQL")
@PostMapping(value = "/checkSql")
@Transactional
public HttpResult checkSql(String sql){
    try{
       List<LinkedHashMap<String,Object>> result=dataService.checkSql(sql);
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    } catch (Exception e){
       return HttpResult.build(false,e.getMessage().split("\r\n"));
    }
    return HttpResult.build(true);
}

由于本段代码功能是在成功执行时回滚,所以回滚语句写在try里面。

发布了36 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_27182767/article/details/103786639