那怎么能让MyBatis的中的数据一直引用Java中的枚举呢?3解决方案3.1创建自定义枚举首先,我们创建一个拥有中文名称的枚举接口ValueNameEnum.java:publicinterfaceValueNameEnumextendsSerializable{/***获取枚举值**@return枚举值*/@JsonValueintgetValue();/***获取枚举名称**@return枚举名称*/StringgetName...
MyBatis中使用Java类与枚举
1前言阅读本文您可以获得的技巧:
携带中文名称的自定义枚举类
在Mybatis的where条件中引用Java类或枚举,而不是使用写死的数值
您需要提前掌握的技能:
Java8
Mybatis
2预设情景系统存在用户信息表t_user,其中记录性别的字段为gender,我们需要编写一个查询全部女性用户的方法
其中性别需要使用枚举,1为男性,2为女性,-1为未知
简单的查询SQL如下:
selectid,name,gender,emailfromt_userwheregender=2可如果直接使用上面的SQL是存在一定问题的:后期如果将gender枚举中女性的值从2修改为88,除了修改枚举本身以外,还需要修改这条SQL
那怎么能让MyBatis的中的数据一直引用Java中的枚举呢?
3解决方案3.1创建自定义枚举首先,我们创建一个拥有中文名称的枚举接口ValueNameEnum.java:
publicinterfaceValueNameEnumextendsSerializable{/***获取枚举值**@return枚举值*/@JsonValueintgetValue();/***获取枚举名称**@return枚举名称*/StringgetName();}创建性别枚举Gender.java:
publicenumGenderimplementsValueNameEnum{MAN(1,"男性"),WOMAN(2,"女性");privateintvalue;privateintname;Gender(intvalue,intname){this.value=value;this.name=name;}@OverridepublicintgetValue(){returnvalue;}@OverridepublicStringgetName(){returnname;}}3.2编写MyBatisxml我们先把上面提到的SQL放在MyBatis的xml文件中:
<selectid="listWomanUsers"resultType="cn.houtaroy.test.entities.UserEntity">selectid,name,gender,emailfromt_userwheregender=2</select>下一步将2改为引用枚举的值:
<selectid="listWomanUsers"resultType="cn.houtaroy.test.entities.UserEntity">selectid,name,gender,emailfromt_userwheregender='${@cn.houtaroy.test.enums.Gender@WOMAN.value}'</select>${}是直接替换
@className@method(args)是调用类的静态方法,@className@field是调用类的静态属性
枚举使用的就是@枚举类@枚举值.value
3.3小坑有一种特殊情况,枚举是内部类,例如Gender在UserEntity中:
publicclassUserEntity{privateStringid;privateGendergender;publicenumGenderimplementsValueNameEnum{//...枚举代码}}这种情况如果我们书写成:${@cn.houtaroy.test.entities.UserEntity.Gender@WOMAN.value},会报无法解析到枚举的错误
这时我们需要使用$,它的含义是内部类调用:UserEntity$Gender@WOMAN.value
2024-09-19