MyBatisの設定項目として useActualParamName
というものがあります。マニュアルの説明によると、
ステートメントの引数を参照する際、メソッドシグネチャで宣言されている名前で参照できるようにします。 このオプションを有効にする場合、プロジェクトを Java 8 (コンパイラオプション -parameters 付き)でコンパイルする必要があります。 (導入されたバージョン: 3.4.1)
もう少し具体的には、
3.4.3 以降では、引数名を指定することによって arg 要素を順不同で記述できるようになりました。引数を名前で指定するためには、各引数に @Param アノテーションを追加するか、プロジェクトを '-parameters' オプション付きでコンパイルし、useActualParamName に true (デフォルト値です)を設定します。
とあります。説明されているセクションが期待するものと違うのでわかりにくい…
ちなみに @Param
の意味を調べようと検索すると、説明には次のように書かれており、 useActualParamName
という機能があることに気づかないので不親切に感じます。
Mapper メソッドが複数の引数を取る場合、このアノテーションを付加することで各引数を名前で参照できるようになります。アノテーションがない場合、各引数は位置を表す数字で #{param1}, #{param2} のように参照します(RowBounds 引数はカウントしません)。 引数に @Param("person") というアノテーションを付加すると、この引数は #{person} として参照できるようになります。
閑話休題。
この useActualParamName
は引用部にある通りデフォルトで true
ですが、実際に使うには -parameters
オプション付きでコンパイルする必要があります。
この -parameters
オプションはどうやって付ければ良いのでしょうか?
…というのを調べようとしたのですが、Spring Boot の場合、 spring-boot-starter-parent
で -parameters
オプションが有効になるような設定が為されている ので、明示的に設定しなくても利用できます。