跳到主要内容

Enum映射

Jimmer处理枚举有两种方式:

  • 映射为字符串:可观察性优先的选择,也是默认的选项。

  • 映射为整数:性能优先的选择。

Jimmer提供了两个用于枚举的注解

  • org.babyfish.jimmer.sql.EnumType: 修饰枚举类型,可选

    指定映射方式,映射为字符串,还是按位置映射为整数

  • org.babyfish.jimmer.sql.EnumItem: 修饰枚举项,可选

    覆盖某个枚举项被映射后的字符串值或整数值

映射为字符串

Gender.java
@EnumType(EnumType.Strategy.NAME)
public enum Gender {
MALE,
FEMALE
}

这里,@EnumType的参数被指定为"NAME", 表示映射为字符串。默认情况下,两个枚举项映射后的字符串和它们的名字相同,即"MALE"和"FEMALE"。

如果你期望后的字符串和枚举项名称不同,你可以使用@EnumItem修饰枚举项。

Gender.java
@EnumType(EnumType.Strategy.NAME)
public enum Gender {

@EnumItem(name = "M")
MALE,

@EnumItem(name = "F")
FEMALE
}

映射为整数

Gender.java
@EnumType(EnumType.Strategy.ORDINAL)
public enum Gender {
MALE,
FEMALE
}

这里,@EnumType的参数被指定为"ORDINAL", 表示映射为整数。默认情况下,两个枚举项映射后的字符串和它们的ordinal相同,即0和1。

如果你期望后的字符串和枚举项的ordinal不同,你可以使用@EnumItem修饰枚举项。

Gender.java
@EnumType(EnumType.Strategy.ORDINAL)
public enum Gender {

@EnumItem(ordinal = 100)
MALE,

@EnumItem(ordinal = 200)
FEMALE
}

不明确使用@EnumType

你也可以不为枚举类型指定@EnumType注解,即,不明确说明某个枚举类型应该映射成字符串还是整数。

此时,Jimmer会参考默认的全部配置。

信息

此全局配置默认为"NAME",如果你需要"ORDINAL",请覆盖全部配置。

接下来,我们展示如何覆盖全部配置。

  • 使用SpringBoot时

    application.ymlapplication.properties种添加配置项jimmer.default-enum-strategy,将其指定为"ORIDNAL"

  • 不使用SpringBoot时

    JSqlClient sqlClient = JSqlClient
    .newBuilder()
    .setDefaultEnumStrategy(EnumType.Strategy.ORDINAL)
    ...省略其他配置...
    .build();