[英]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.