簡體   English   中英

枚舉常量在mybatis的sql查詢中

[英]Enum constant in mybatis's sql query

我需要在查詢中引用枚舉常量。 我試過下一個例子

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

但它只是插入@MyEnum@Value.tostring()值。 我也試過了

#{@MyEnum@Value.tostring()}

但它被視為查詢參數。 那么如何在查詢中使用枚舉常量?

PS值列是varchar

如果要訪問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進行測試

您確定要詢問有關在MyBatis中使用Java的問題嗎? 我不確定@MyEnum@符號是什么。

在任何情況下,這里是你如何用MyBatis使用Java做的事情(我不知道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,它仍然有效。

只有欣賞:

如果要將其用於<if test =“...”>,您還可以執行以下操作:

<if test="enumParam == @the.enum.pack.MyEnum@VALUE">
    ...
</if>

並且工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM