4

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

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

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

#{@MyEnum@Value.tostring()}

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

PS 值列是 varchar

4

3 回答 3

6

如果你想访问 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 测试

于 2016-10-24T15:23:03.310 回答
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 并且它仍然有效。

于 2012-06-08T01:56:09.347 回答
0

仅供欣赏:

如果您想将它用于 <if test="..."> 您还可以执行以下操作:

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

并且工作正常。

于 2017-05-09T11:44:08.713 回答