2012-05-12 5 views
3

クエリで列挙定数を参照する必要があります。私はmybatisのSQLクエリの列挙定数

<select=...> 
    select * from tableA where value = @[email protected]() 
</select> 

次の例を試してみましたが、それは単に@[email protected]()値を挿入します。また、私は試しました

#{@[email protected]()} 

しかし、それはクエリパラメータとして扱われます。だから私はどのようにクエリで列挙定数を使用できますか?

PS値の欄には、

+0

これを解決しましたか?私は偽のパラメータを使用しましたが、enumの実際の値をクエリに渡したいと思います。 –

+0

私はそれを調べました。これを行うことはできませんが、select/whenタグを使用して、いくつかのパラメータが列挙型の値と等しいかどうかをテストすることができます。 – maks

答えて

1

はあなたがMyBatisのでのJavaの使用についての質問をされてもよろしいですvarchar型のですか?私は@[email protected]表記法が何であるかわからない。

いずれにしても、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の(と思う)に渡された最初のパラメータのデフォルトの名前ですが、中に渡される唯一つのパラメータがあるとき、あなたはそれに別の名前を付けることができますので、何かのようにこれでも動作します:

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

私はparameterTypeもオフにしておくことができますそれはまだ動作します。

+1

静的に列挙型の列挙型の値をクエリで定義します( 'somesrting 'クエリができます)。だから私は私の列挙定数の値を変更する場合、私はマッパーファイルでこの値を変更しないでください。また、この値をパラメータとしてクエリに渡すのは良い考えではありません – maks

+0

静的に定義された列挙定数の意味や、それが私の解決策とどのように違うのかよくわかりません。私の例では、列挙型ではなくクエリに列挙型を渡しています。そして、MyBatisクエリで 'toString'を使って列挙型の文字列値を抽出します。 enum定数の値を変更すると、私の解決策でマッパーを変更する必要はありません(db値も変更する必要があります)。私の呼び出しのMapperインターフェースは 'SomeObject getSomeObjectByValue(MyEnum enum)'です。私はMyBatis Koansのkoan23の実例を持っています。https://github.com/midpeter444/mybatis-koans – quux00

+0

質問に答えるだけでなく、使用されるトーンも答えられないので、投票した答えが下になります。 – user482745

4

あなたは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 
    } 
} 

を。

<select id="report" resultMap="resultMap"> 
    SELECT * 
    FROM invoices 
    WHERE currency_symbol = '${@[email protected]()}' 
</select> 

MyBatisのは、したがって、あなたが引用符で囲む必要があり任意の引用符なしで値を注入されています

次に、あなたはあなたの中にXMLファイルをこのフォームを使用する必要があります。

はMyBatisのでテスト3.3.1

0

だけ感謝:

:あなたがテストは= "..." >あなたも次の操作を行うことができれば<にそれを使用したい場合

<if test="enumParam == @[email protected]"> 
    ... 
</if> 

うまくいきます。