2016-09-19 3 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)には1行のコメントはありません。私はSOの新しいBoundSqlの構築についての例を見ましたが、それは私が必要としたものではありません。

BoundSql.getParameterMappings()とBoundSql.getParameterObject()に格納されている内容をテストしようとしましたが、かなり複雑なようです。 JavaTypeとJdbcTypeがあり、パラメータが1つしかない場合、ParameterObjectはMapオブジェクトではありません。

BoundSqlからバインドパラメータを取得する適切な方法は何ですか?

答えて

0

MyBatisのソースコード(コメントは絶滅のおそれのある種)を調べた後、MyBatisがバインドパラメータをどのように処理するかを知りました。ただし、JDBC Statementオブジェクトへのアクセスが必要です。これは、インターセプタ内では使用できません。

は、その後、私はいくつかのテストを行なったし、これに定住:

  1. のみあなたにパラメータ自体を与える単一のパラメータ、BindSql.getParameterObject()がある場合。 BindSql.getParameterMappings()とParameterMapping.getJavaType()を使用することで、パラメータがどのJavaクラスであるかを知ることができます。

  2. 複数のパラメータがある場合、BindSql.getParameterObject()は、HashMapを拡張するorg.apache.ibatis.binding.MapperMethod.ParamMapのインスタンスを返します。そうでない場合は、使用したDTOのインスタンスになります。 。 ParameterMappingの.getProperty()をキーまたはゲッター名として使用すると、バインドパラメータを1つずつ処理できます。

誰かがこれを行う良い方法があれば、私はすべて耳にします。

関連する問題