2016-09-19 5 views
0

Как прочитать параметры привязки внутри Interceptor 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) не содержит ни одной строки комментария. Я видел пример SO о создании нового BoundSql, но это не то, что мне нужно.

Я попытался проверить содержимое, хранящееся в BoundSql.getParameterMappings() и BoundSql.getParameterObject(), но это кажется довольно сложным. Там JavaType и JdbcType, и если есть только один параметр, ParameterObject не является объектом Map.

Каков правильный способ получить параметры привязки из BoundSql?

ответ

0

После прохождения исходного кода MyBatis (где комментарий является исчезающим видом), я узнал, как MyBatis обрабатывает параметры привязки. Однако для этого требуется доступ к объекту JDBC Statement, который просто недоступен внутри Interceptor.

Тогда я сделал некоторые испытания и остановился на этом:

  1. Если есть только один параметр, BindSql.getParameterObject() даст вам сам параметр. Используя BindSql.getParameterMappings() и ParameterMapping.getJavaType(), я могу указать, какой класс Java является параметром.

  2. Если есть более чем один параметр, BindSql.getParameterObject() возвращает экземпляр org.apache.ibatis.binding.MapperMethod.ParamMap, который простирается HashMap, или это будет экземпляр DTO вы использовали , Используя .getProperty() из ParameterMapping в качестве ключа или как имя геттера, вы можете обрабатывать параметры привязки по одному.

Если у кого-то есть лучший способ сделать это, я все уши.

Смежные вопросы