2017-02-18 44 views
0

私はMyBatisアプリケーションを作成していますが、@Selectの周りにはまっています。私は@Selectの定義で何が問題なのか分かりませんが、すべてうまく見えますが、Parameter not foundの例外があります。パラメータをMyBatisに渡す@Select

私の@Insertステートメントにパラメータを渡すと、同じパターンに従いました。問題なく動作します。

私はMyBatis 3.4.2を使用します。

これは私の@Selectです:私が得たもの

@Select("SELECT * " 
     + "FROM configuration " 
     + "WHERE key_name = #{key} AND " 
     +  "(#{userId} IS NULL AND user_id IS NULL) OR user_id = #{userId} AND " 
     +  "status = 1") 
Configuration findByKeyAndUserId(String key, Long userId); 

例外:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2] 
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2] 

答えて

0

あなたは、単一のパラメータオブジェクトを渡すと、プロパティがgetterまたはキーから直接アクセスされていますマップのために設定されます。あなたがこの方法で複数のパラメータを渡したいときは、アノテーションでパラメータに名前を付ける必要があります:

Configuration findByKeyAndUserId(@Param("key") String key, @Param("userId") Long userId); 

この注釈ベースの構文は、実際にキーと値のマップのように振る舞います。キーは@Paramによって提供されます。パラメータ変数として選択した名前は表示されません。

0

JDK 8以降でコンパイルオプション-parametersを試してください。@Param注釈は省略できます。

https://github.com/mybatis/mybatis-3/issues/549

感謝を参照してください。

+0

"-parameters"を使用するようにmavenとintellijを設定する方法を知っていますか?私は - パラメータを私のmaven-compiler-pluginに追加しましたが、影響はありません。 Intellij:ビルド、実行、配備>コンパイラ> Javaコンパイラ>追加のコマンドラインパラメータが動作しません。たぶん私はそれに多くの時間を費やす必要があります:( – zappee

+0

Maven: https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgsを参照してください。 –

+0

IntelliJ: あなたは正しいです! !しかし、あなたはあなたのプロジェクトを再構築する必要があります( ">プロジェクトをリビルドビルドする" を実行) –

関連する問題