Java中如何获取枚举常量括号里的值

先说一下我遇到的问题,如果你是遇到了跟我一样的问题,再往下看解决方法是否对你有帮助,以免浪费时间。
Q:我的项目是Spring boot + Mybatis,比如定义性别,代码如下:

public enum SexEnum implements IEnum<String> {
   MALE("1");
   FAMALE("0");

    private String val;
    DataSourceEnum(String val){
        this.val = val;
    }
    @Override
    public String getValue() {
        return null;
    }
}

service层:

List<Student> studentList = studentMapper.selectStudent(SexEnum.MALE);

mapper层:

List<Student> selectStudent(@Param("sex")SexEnum sex);

看起来这样写一点问题都没有。But,获取不到数据。
问题出在哪呢?实际在我项目中查询需要穿的字段有5个,其中service层中还有分组查询、sql中还有模糊查询,某办法,只能不断修改Debug测试,最终发现问题是,数据库中存放的是 0 和 1,查询时传入的值是 MALE 和 FAMALE,自然无法获取到数据。
在查询数据时发现如果传入的是枚举常量,而不是括号里的值,便无法查询出数据,因为数据库中存放的是值
问题找到了,该如何解决呢?我一开始百度的是 Mybatis 如何处理Java中的枚举数据,参考了好多博客,还写了一个 Mybatis 自定义转换类型的类来进行转换,最终依然无法解决。
终于在今天,历时1天半,我找到了根本问题并且解决了这个问题。枚举类中的 getValue()方法,返回值是 null,自然获取不到值了,对症下药,修改枚举类。

public enum SexEnum implements IEnum<String> {
   MALE("1");
   FAMALE("0");

    private String val;
    DataSourceEnum(String val){
        this.val = val;
    }
    @Override
    public String getValue() {
        return val; //修改为返回val
    }
}

service层:

List<Student> studentList = studentMapper.selectStudent(SexEnum.MALE.getValue());  //获取到值

mapper层:

List<Student> selectStudent(@Param("sex")String sex);  //修改为String类型,这个根据数据库中存储的数据类型来定

完美解决!数据查询到了。
之所以用这么长时间解决这个问题,一是因为代码是其他同事写了,我的功能需要来调用他的功能,因此对代码不熟悉。
而是Java基础比较弱,往往很多问题无法在第一时间找到,找到也无法判断具体问题出在哪,也就不能第一时间解决。
值得记录一下的,如果你也遇到相似问题,希望能给你启发。

你可能感兴趣的:(Java,枚举)