mybatis处理枚举

阅读更多
前情:
1.首先,枚举我直接使用中文。省得码表翻译。
2.生成表,以及简单操作时,使用JPA,数据库会存储ordinal。
3.复杂查询使用mybaties,两者混用。

代码:
1.枚举
public enum InfoType implements EnumTypeInterface {
    下载信息,
    试用及购买信息;
}
public interface EnumTypeInterface {
}
public enum EnumTypes{
    InfoType("文本信息类型"),
    OrderStatusType("订单状态类型");

    private String desc;
    EnumTypes(String desc) {
        this.desc = desc;
    }

    public String desc() {
        return this.desc;
    }
}

定义枚举接口EnumTypeInterface,目的是结合EnumTypes提供一个查询枚举值的API接口:
@Api(description = EnumsController.DESC)
@RestController
@RequestMapping("/enums")
public class EnumsController {
    public static final String DESC = "类型参数";

    public static final String enumPkg = "api.xxx.com.petstore.enumeration";

    @ApiOperation(DESC+"列表")
    @GetMapping("/{typeName}")
    public List getEnumList(@PathVariable EnumTypes typeName) throws Exception {
        Class enumClass;
        try {
            enumClass = (Class)Class.forName(String.join(".", enumPkg, typeName.toString()));
            Method values = enumClass.getMethod("values");
            EnumTypeInterface[] interfaces = (EnumTypeInterface[])values.invoke(null);
            return Arrays.stream(interfaces).map(Object::toString).collect(Collectors.toList());
        } catch (ClassNotFoundException e) {
            throw new QcNotFoundException(DESC,typeName);
        }
    }
}

=================================================
好了,上重点:

...
typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>

...


另外在查询条件时,直接.ordinal属性即可:
...	
	
		and o.status = #{status.ordinal}
	




你可能感兴趣的:(mybatis处理枚举)