2016-04-25 4 views
1

mybatis注釈クエリに次のエラーで問題があります。mybatis注釈選択条件で複数回使用するパラメータを持つクエリを選択

org.apache.ibatis.binding.BindingException:パラメータ 'strDateStart'が見つかりません。利用可能なパラメータは[0,1、param1、param2]

です。次はマッパークラスのコードです。


    `@Select("SELECT * FROM Result WHERE"AND proc_date >= '#{strDateStart}'"+ 
    "AND proc_date >= '#{strDateEnd}'"+ 
    "AND update_date <= '#{strDateStart}'"+ 
    "AND update_date <= '#{strDateEnd}'") 
    public ArrayList<ResultDao> select(String strDateStart,String strDateEnd);` 

queryとargsのパラメータで同じ名前をつけますが、同じパラメータの条件で複数回使用できますか?

+0

私はMyBatisのサポートは考えていないTBLSAMPLE SELECT * FROMこの機能は 'strDateStart'と' strDateEnd'を 'java.util.Map'に置くことができます。メソッドのパラメータとして使うことができます。そして、あなたは何度も何回も全てのフィールドを使うことができます。 – Blank

+0

あなたのヒントをありがとう。 「java.util.Map」も私のためには機能しませんでした。同じエラーが発生しました。 – hmmh

答えて

1

問題が
1によって解決されました。


    `public class SelectConditions { 
    String strDateStart; 
    String strDateEnd; 
    public String getStrDateStart() { 
     return strDateStart; 
    } 
    public void setStrDateStart(String strDateStart) { 
     this.strDateStart = strDateStart; 
    } 
    public String getStrDateEnd() { 
     return strDateEnd; 
    } 
    public void setStrDateEnd(String strDateEnd) { 
     this.strDateEnd = strDateEnd; 
    } 
    public SelectConditions(String strDateStart, String strDateEnd) { 
     this.strDateStart = strDateStart; 
     this.strDateEnd = strDateEnd; 
    }` 


3.変更マッパークラス条件クラスに


    `@Select("SELECT * FROM Result WHERE"AND proc_date >= #{strDateStart}"+ 
     "AND proc_date >= #{strDateEnd}"+ 
     "AND update_date <= #{strDateStart}"+ 
     "AND update_date <= #{strDateEnd}") 
    public ArrayList select(SelectConditions conditions)` 
0

代わりにこれを試しましたか?コードは以下のようにその条件のためにクラスを作成する変数#{strDateXXXX}
2を囲む単一引用符を削除

@Select("SELECT * FROM Result WHERE"AND proc_date >= '#{strDateStart}'"+ "AND proc_date >= '#{strDateEnd}'"+ "AND update_date <= '#{strDateStart}'"+ "AND update_date <= '#{strDateEnd}'") public ArrayList<ResultDao> select(@Param("strDateStart") String strDateStart, @Param("strDateEnd") String strDateEnd);

+0

お時間をありがとうございます。私は試しましたが、それは私にとってはうまくいかなかったのです。エラーは2番目の#{strDateStart}で発生しました。 – hmmh

+0

取得しているエラーは何ですか? –

0

を渡すことによって、私は私のために地図と、この作品のparamsを設定するために@SelectProviderを使用:

マッパークラスを:

@SelectProvider(type = MyBatisSqlProvider.class, method = "getSqlString") 
    public List<Map<String, Object>> select(@Param("sql") String sqlString, @Param("sqlParams") Map<String, Object> sqlParams); 

プロバイダクラス:

String sqlString = (String) params.get(SQL_PATH); 
     Map<String, Object> sqlParams = (Map<String, Object>) params.get(SQL_PARAM); 

     if (sqlParams != null) { 
      params.putAll(sqlParams); 
     } 
return sqlString; 

マイテーブル:

create table TBLSAMPLE (id int primary key auto_increment, name varchar, name1 varchar); 
insert into TBLSAMPLE (name,name1) values ('test','test'); 
insert into TBLSAMPLE (name,name1) values ('test','test'); 
insert into TBLSAMPLE (name,name1) values ('test','test'); 
insert into TBLSAMPLE (name,name1) values ('test','test'); 
insert into TBLSAMPLE (name,name1) values ('qa','test'); 

とSQLでテスト:名=#{名前}とNAME1 =#{名前}