我需要在查询中引用枚举常量。我试过下一个例子
<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@
符号是什么。
无论如何,这里是你如何使用 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 并且它仍然有效。
仅供欣赏:
如果您想将它用于 <if test="..."> 您还可以执行以下操作:
<if test="enumParam == @the.enum.pack.MyEnum@VALUE">
...
</if>
并且工作正常。