阅读量:0
想在mybatisplus拦截器Executor 阶段做缓存处理,因为parameterHandler阶段是已经到sql语句准备执行并且填充参数了,而且ResultSetHandler阶段已经到sql语句执行完毕返回结果集了,statementHandler阶段是准备执行sql阶段,因此最恰当的缓存处理阶段是在executor阶段进行缓存处理,但是executor阶段会发现获取不到查询参数。
因为如下:
QueryWrapper
是 MyBatis Plus 提供的用于构建动态 SQL 的辅助类。它会在执行查询前组装 SQL 语句和相应的参数。有些情况下,参数信息可能直到调用某些方法(如 getCustomSqlSegment()
)后才会被填充到 paramNameValuePairs
中。因此要想paramNameValuePairs
不为空,必须显示调用一次getCustomSqlSegment方法,初始化填充参数。
Map<?, ?> arg = ( Map<?, ?>) invocation.getArgs()[1]; String address =null; String name =null; System.out.println(arg); Map<String, Object> paramNameValuePairs=null; for (Object entry : arg.values()) { QueryWrapper<?> queryWrapper_emp = (QueryWrapper<?>) entry; //System.out.println(queryWrapper_emp.getCustomSqlSegment()); paramNameValuePairs = queryWrapper_emp.getParamNameValuePairs(); System.out.println("paramNameValuePairs="+paramNameValuePairs); break; }