在执行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里面。