枚举常量在mybatis的sql查询中

时间:2012-05-12 10:26:57

标签: java sql mybatis

我需要在查询中引用枚举常量。我试过下一个例子

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

但它只是插入@MyEnum@Value.tostring()值。我也试过

#{@MyEnum@Value.tostring()}

但它被视为查询参数。那么如何在查询中使用枚举常量?

PS值列是varchar

3 个答案:

答案 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>

工作正常。