我需要在查询中引用枚举常量。我试过下一个例子
<select=...>
select * from tableA where value = @MyEnum@Value.tostring()
</select>
但它只是插入@MyEnum@Value.tostring()
值。我也试过
#{@MyEnum@Value.tostring()}
但它被视为查询参数。那么如何在查询中使用枚举常量?
PS值列是varchar
答案 0 :(得分: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
}
}
当您想要使用枚举的任何属性时。
然后你必须在你的xml文件中使用这个表单:
<select id="report" resultMap="resultMap">
SELECT *
FROM invoices
WHERE currency_symbol = '${@org.sample.domain.Currency@USD.getSymbol()}'
</select>
MyBatis正在注入没有任何引号的值,因此您必须将其括在引号中。
使用MyBatis 3.3.1进行测试
答案 1 :(得分: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的第一个参数的默认名称(我认为),但是当传入的参数只有一个时,你可以给它一个不同的名字,所以像这样的东西也会起作用: / p>
<select id="getSomeObjectByValue" resultType="SomeObject">
SELECT *
FROM tableA
WHERE UPPER(value) = #{p.toString()}
</select>
请注意,我也可以关闭parameterType,它仍然有效。
答案 2 :(得分:0)
只有欣赏:
如果您想将其用于&lt; if test =“...”&gt;您还可以执行以下操作:
<if test="enumParam == @the.enum.pack.MyEnum@VALUE">
...
</if>
工作正常。