2016-09-19 37 views
0

如何讀取MyBatis攔截器內部的綁定參數?我試圖提取這些信息,以便我可以將它們寫入日誌表。訪問MyBatis攔截器中的綁定參數

該指南(http://www.mybatis.org/mybatis-3/configuration.html)未提及如何獲取它們,而JavaDoc(http://www.mybatis.org/mybatis-3/es/apidocs/org/apache/ibatis/mapping/BoundSql.html)沒有單行註釋。我看到了關於構建一個新的BoundSql的例子,但這不是我所需要的。

我試圖測試在BoundSql.getParameterMappings()和BoundSql.getParameterObject()中存儲了什麼內容,但它看起來相當複雜。有JavaType和JdbcType,並且如果只有一個參數,則ParameterObject不是Map對象。

從BoundSql獲取綁定參數的正確方法是什麼?

回答

0

經過MyBatis源代碼(其中評論是一個瀕危物種)後,我發現MyBatis如何處理綁定參數。但是,這需要訪問JDBC語句對象,這在攔截器內根本不可用。

然後我做了一些測試,並看中了這個:

  1. 如果只有一個參數,BindSql.getParameterObject()會給你的參數本身。通過使用BindSql.getParameterMappings()和ParameterMapping.getJavaType()我可以知道哪個Java類的參數。

  2. 如果有多個參數,BindSql.getParameterObject()將返回一個org.apache.ibatis.binding.MapperMethod.ParamMap的實例,它擴展了HashMap,或者它將是您使用的DTO的一個實例。使用ParameterMapping中的.getProperty()作爲鍵或作爲getter名稱,可以逐個處理綁定參數。

如果有人有更好的方法來做到這一點,我全部耳朵。