Java enum 数据库存储问题(大家都是存字符串还是数值)
想问下大家怎么存储 enum 的,是字符串存储还是数值存储? 比如:
Gender { MALE, FEMALE }
想问下大家怎么存储 enum 的,是字符串存储还是数值存储? 比如:
Gender { MALE, FEMALE }
我用
https://github.com/huijiewei/agile-boot/blob/master/agile-base/src/main/java/com/huijiewei/agile/base/consts/ValueDescription.java
https://github.com/huijiewei/agile-boot/tree/master/agile-base/src/main/java/com/huijiewei/agile/base/consts
里面有使用的例子
仅供参考:
“`
@Getter
@AllArgsConstructor
public enum State {
UNKNOWN(“未知”),
ACTIVE(“正常”),
INACTIVE(“封禁”),
;
private final String desc;
@JsonCreator
public static State fromStr(String strValue) {
return Arrays.stream(State.values()).filter(value -> value.value().equals(strValue)).findFirst().orElse(UNKNOWN);
}
@JsonValue
public String value() {
return this.name();
}
@Converter(autoApply = true)
public static class DatabaseColumnConverter implements AttributeConverter<State, String> {
public String convertToDatabaseColumn(State state) {
return state != null ? state.name() : UNKNOWN.name();
}
public State convertToEntityAttribute(String name) {
return fromStr(name);
}
}
}
“`
enum 不能做的 class 都能做。
enum 各种蹩脚规范代码编写约束,本质上还是一个 class,但开头不能放别的东西,气不气人?
有什么理由用 enum ?没有!
user.state == UserState.INACTIVE.getValue()
即可
PS:多一个 .getValue() 感觉还是很不爽的,不如直接 user.state == UserState.INACTIVE
我个人是很喜欢 java 的 enum 设计的,用对路了会感觉很好用。事实上,我写 C#项目的时候,还专门弄了一个 Enum 类来模拟 java 的 enum 。
“`java
public enum Gender {
MALE,
FEMALE;
}
“`
而且有自动化工具帮你存储数据库时转换为数值存储,如 1,2,提取时自动转换,这种状态维护起来就简单多了
我想要的就是这种自动化工具(不用硬编码数值,看了一些 api,fb 和阿里就有这么搞)。
enum Gender implement IntCode{
MALE(1),
FEMALE(2);
private Integer code;
public Integer getCode(){ return code; }
}
interface IntCode{
Integer getCode()
}