Closed helloqhx closed 4 years ago
去看文档
请问一下哪里配错了吗?除了需要配置@EnumValue外,还需要什么配置吗?
这态度。。。好歹你也贴一下文档链接呀
建议提供完整的解决方法,说明问题根因,避免重复踩坑。
自动映射枚举 https://baomidou.com/guides/auto-convert-enum/
Could not find @EnumValue in Class: java.lang.Object.
按照官方文档,确实解决了
自动映射枚举 https://baomidou.com/guides/auto-convert-enum/
声明通用枚举属性 方式一:使用 @EnumValue 注解枚举属性
配置 MyBatis-Plus 自动映射枚举 方式二:全局修改 DefaultEnumTypeHandler
InterfaceCacheConfigDo
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lefit.gateway.admin.client.model.EnableStateEnum;
import com.lefit.gateway.admin.client.model.EnvironmentTagEnum;
import lombok.Data;
/**
* 接口缓存配置【数据对象】
*
* @since 2024/5/17
*/
@Data
@TableName(value = "t_api_interface_cache_config", autoResultMap = true)
public class InterfaceCacheConfigDo {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
// ...
/**
* 环境标签,1-开发环境,2-测试环境,3-预发环境,4-生产环境
*/
@TableField(value = "environment_tag")
private EnvironmentTagEnum environmentTag;
/**
* 启用状态,0-未启用,1-启用
*/
@TableField(value = "enable_status")
private EnableStateEnum enableStatus;
// ...
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
EnvironmentTagEnum
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 环境标签
*
* @since 2024/5/17
*/
@Getter
@AllArgsConstructor
public enum EnvironmentTagEnum {
/**
* 开发环境
*/
DEVELOP_ENV(0),
/**
* 测试环境
*/
TEST_ENV(1),
/**
* 预发环境
*/
STAGING_ENV(2),
/**
* 生产环境
*/
PRODUCTION_ENV(3),
;
/**
* 标记数据库存的值是code
*/
@EnumValue
private final int code;
}
EnableStateEnum
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 启用状态
*
* @since 2024/5/17
*/
@Getter
@AllArgsConstructor
public enum EnableStateEnum {
/**
* 未启用
*/
NOT_ENABLE(0),
/**
* 启用
*/
ENABLE(1),
;
/**
* 标记数据库存的值是code
*/
@EnumValue
private final int code;
}
application.properties
mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
按照官方文档,确实解决了
自动映射枚举 https://baomidou.com/guides/auto-convert-enum/
声明通用枚举属性 方式一:使用 @EnumValue 注解枚举属性
配置 MyBatis-Plus 自动映射枚举 方式二:全局修改 DefaultEnumTypeHandler
InterfaceCacheConfigDo
import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.lefit.gateway.admin.client.model.EnableStateEnum; import com.lefit.gateway.admin.client.model.EnvironmentTagEnum; import lombok.Data; /** * 接口缓存配置【数据对象】 * * @since 2024/5/17 */ @Data @TableName(value = "t_api_interface_cache_config", autoResultMap = true) public class InterfaceCacheConfigDo { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Long id; // ... /** * 环境标签,1-开发环境,2-测试环境,3-预发环境,4-生产环境 */ @TableField(value = "environment_tag") private EnvironmentTagEnum environmentTag; /** * 启用状态,0-未启用,1-启用 */ @TableField(value = "enable_status") private EnableStateEnum enableStatus; // ... /** * 创建时间 */ @TableField(value = "create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 更新时间 */ @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
EnvironmentTagEnum
import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; import lombok.Getter; /** * 环境标签 * * @since 2024/5/17 */ @Getter @AllArgsConstructor public enum EnvironmentTagEnum { /** * 开发环境 */ DEVELOP_ENV(0), /** * 测试环境 */ TEST_ENV(1), /** * 预发环境 */ STAGING_ENV(2), /** * 生产环境 */ PRODUCTION_ENV(3), ; /** * 标记数据库存的值是code */ @EnumValue private final int code; }
EnableStateEnum
import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; import lombok.Getter; /** * 启用状态 * * @since 2024/5/17 */ @Getter @AllArgsConstructor public enum EnableStateEnum { /** * 未启用 */ NOT_ENABLE(0), /** * 启用 */ ENABLE(1), ; /** * 标记数据库存的值是code */ @EnumValue private final int code; }
application.properties
mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
你好这个参数mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler我没办法加,这个影响了所有的枚举类的TypeHander,不同的类存数据库的字段是不一样的,有写是code有些是value有些是name。 目前我在自己的枚举属性上加了@EnumValue, 实体类上加了TypeHandler,我的typeHandler构造方法报错Caused by: java.lang.IllegalArgumentException: Object does not represent an enum type. 还请赐教
你好这个参数mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler我没办法加,这个影响了所有的枚举类的TypeHander,不同的类存数据库的字段是不一样的,有写是code有些是value有些是name。 目前我在自己的枚举属性上加了@EnumValue, 实体类上加了TypeHandler,我的typeHandler构造方法报错Caused by: java.lang.IllegalArgumentException: Object does not represent an enum type. 还请赐教
mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
,是Spring Boot自动化配置。可以通过MybatisConfiguration#setDefaultEnumTypeHandler
手动设置喔你好这个参数mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler我没办法加,这个影响了所有的枚举类的TypeHander,不同的类存数据库的字段是不一样的,有写是code有些是value有些是name。 目前我在自己的枚举属性上加了@EnumValue, 实体类上加了TypeHandler,我的typeHandler构造方法报错Caused by: java.lang.IllegalArgumentException: Object does not represent an enum type. 还请赐教
当前使用版本(必须填写清楚,否则不予处理)
3.3.0
该问题是怎么引起的?**
QueryWrapper 使用enum类型的参数时,不能正确地根据MybatisEnumHandler转换。
重现步骤
第一种使用方式:
报错信息:
第二种使用方式:
不能正确执行: debug信息: