4

クエリで列挙定数を参照する必要があります。次の例を試しました

<select=...>
  select * from tableA where value = @MyEnum@Value.tostring()
</select>

ただし、値を挿入するだけ@MyEnum@Value.tostring() です。また、私は試しました

#{@MyEnum@Value.tostring()}

ただし、クエリ パラメータとして扱われます。では、クエリで列挙型定数を使用するにはどうすればよいですか?

PS 値列は varchar です

4

3 に答える 3

6

MyBatis の列挙型定数にアクセスする場合は、次の形式を使用する必要があります。

指定された列挙型:

package org.sample.domain;

public enum Currency {
    USD("$"), YEN("Y"), PLN("zl");

    private String symbol;

    Currency(String symbol) {
        this.symbol = symbol;
    }

    public String getSymbol() {
        return this.symbol
    }
}

列挙型の任意の属性を使用する場合。

次に、xml ファイルでこのフォームを使用する必要があります。

<select id="report" resultMap="resultMap">
    SELECT *
    FROM invoices
    WHERE currency_symbol = '${@org.sample.domain.Currency@USD.getSymbol()}'
</select>

MyBatis は引用符なしで値を注入するため、引用符で囲む必要があります。

MyBatis 3.3.1でテスト済み

于 2016-10-24T15:23:03.310 に答える
1

MyBatis で Java を使用することについて質問していてよろしいですか? @MyEnum@なんの表記かわかりません。

いずれにせよ、Java を使用して MyBatis で求めていることを行う方法は次のとおりです (MyBatis.NET バージョンに別の方法があるかどうかはわかりません)。これを MyBatis-3.1.1 でテストしました。

<select id="getSomeObjectByValue" resultType="SomeObject" parameterType="MyEnum">
  SELECT *
  FROM tableA
  WHERE UPPER(value) = #{param1.toString()}
</select>

「param1」は、MyBatis に渡される最初のパラメーターのデフォルト名です (私が思うに) が、渡されるパラメーターが 1 つしかない場合は、別の名前を付けることができるため、次のようなものも機能します。

<select id="getSomeObjectByValue" resultType="SomeObject">
  SELECT *
  FROM tableA
  WHERE UPPER(value) = #{p.toString()}
</select>

parameterType をオフのままにしても、引き続き機能することに注意してください。

于 2012-06-08T01:56:09.347 に答える