gpt4 book ai didi

mysql - MyBatis 从 MySql 数据库中检索整数作为枚举

转载 作者:可可西里 更新时间:2023-11-01 06:43:54 25 4
gpt4 key购买 nike

我有一个包含枚举属性的 POJO。

[Speed.java]

public class SpeedEntry implements Serializable {

[...]

private int idSpeed;
private SpeedStatus status; // enum Property

[...]

[SpeedStatus.java]

public enum SpeedStatus {

[...]

VALID(1), INVALID(2), UNKNOWN(0); // Possible values.

private int value;

// Default constructor
private SpeedStatus(final int pValue) {
this.value = pValue;
}
[...]

我想存储和检索 Speed 对象,并像往常一样用 MyBatis 填充它的属性。分配给 SpeedStatus 的列创建为 INT(11)

在这种情况下,执行 INSERT 是非常直接地访问其内部值属性:

#{status.value}

但是,检索对象并从存储在数据库中的整数中获取其枚举值并不像插入对象那样容易。我尝试使用 resultMap,但没有成功:

[speedMapper.xml]

<resultMap id="speedMap" type="Speed">
<result property="idSpeed" column="idSpeed" />
<result column="status" property="status.value"
typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</resultMap>

所以...有可能实现我正在寻找的东西吗?那里有任何简单的澄清示例吗?

最好的选择是什么?我应该将存储在数据库中的类型更改为“枚举”吗?

提前致谢。

最佳答案

在您的插入语句中,您可以通过以下方式直接访问其内部值

#{status.value}

通过这种方式,您可以按值 1 插入 VALID,按值 2 插入 INVALID,按值 0 插入 NUKNOWN。但是在您的检索语句中,您使用的是

定义的 resultMap
typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"

这意味着您使用

将表 int(11) 字段映射到枚举 POJO 属性
SpeedStatus.ordinal()

枚举值将按照 SpeedStatus 中定义的顺序进行映射。所以在 select 语句表字段值 0 映射到 VALID,1 映射到 INVALID,2 映射到 UNKNOWN。

如果您仍然想使用 EnumOrdinalTypeHandler,您应该定义 Enum 值等于它的 ordinal() 值。

public enum SpeedStatus {

UNKNOWN(0), VALID(1), INVALID(2);

private int value;

private SpeedStatus(final int pValue) {
this.value = pValue;
}

关于mysql - MyBatis 从 MySql 数据库中检索整数作为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com