访问MyBatis拦截器

时间:2016-09-19 07:13:47

标签: mybatis

如何读取MyBatis Interceptor中的绑定参数?我正在尝试提取这些信息,以便将其写入日志表。

指南(http://www.mybatis.org/mybatis-3/configuration.html)没有提到如何获取它们,而JavaDoc(http://www.mybatis.org/mybatis-3/es/apidocs/org/apache/ibatis/mapping/BoundSql.html)没有一行注释。我在SO上看到了关于构建一个新的BoundSql的例子,但这不是我需要的。

我试图测试哪些内容存储在BoundSql.getParameterMappings()和BoundSql.getParameterObject()中,但它似乎相当复杂。有JavaType和JdbcType,如果只有一个参数,则ParameterObject不是Map对象。

从BoundSql获取绑定参数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

在浏览MyBatis源代码(评论是濒危物种)后,我发现了MyBatis如何处理绑定参数。但是,这需要访问JDBC Statement对象,这在Interceptor中根本不可用。

然后我做了一些测试并确定了这个:

  1. 如果只有一个参数,BindSql.getParameterObject()将为您提供参数本身。通过使用BindSql.getParameterMappings()和ParameterMapping.getJavaType(),我可以告诉参数是哪个Java类。

  2. 如果有多个参数,BindSql.getParameterObject()将返回一个扩展HashMap的org.apache.ibatis.binding.MapperMethod.ParamMap实例,或者它将是DTO的一个实例你用过的。使用ParameterMapping中的.getProperty()作为键或getter名称,可以逐个处理绑定参数。

  3. 如果有人有更好的方法可以做到这一点,我全心全意。