什么是枚举自动注入?
官方文档是这么解释的
解决了繁琐的配置,让 mybatis 优雅的使用枚举属性!
按我的理解是维护在内存中且不易修改的轻量级字典。目前觉得这个功能的使用场景相对有限,但是如果有用到的话开箱即用也是很棒的。废话不多说,接下来让我们看一下它的实际效果吧。
实际效果
通常情况下,我们会这样声明一个用户实体
public class User { private String id; private String name; private Integer age; private String phone; //省略getter&setter&constructor ... }
那么最终获取到的JSON数据应该类似于这样
{ id: "1", name: "张三", age: 18, phone: "10000" }
如若使用M来4源gaodaimacom搞#代%码*网yBatis-Plus的枚举自动关联注入,可以更优雅的实现如下效果
{ id: "1", name: "张三", age: "十八岁", phone: "中国电信" }
实现步骤
实现过程仅有三步且非常简单,代码量也非常的少,下面介绍一下实现步骤。
1.创建两个枚举对象,分别为AgeEnum与PhoneEnum,这里使用枚举建立一个映射关系。
public enum AgeEnum implements IEnum { ONE(1, "一岁"), TWO(2, "二岁"); private int age; private String desc; AgeEnum(final int age, final String desc) { this.age = age; this.desc = desc; } @Override public Serializable getValue() { return this.age; } @JsonValue public String getDesc(){ return this.desc; } }
public enum PhoneEnum implements IEnum { CMCC("10086", "中国移动"), CUCC("10010", "中国联通"), CT("10000", "中国电信"); private String phone; private String desc; PhoneEnum(final String phone, final String desc) { this.phone = phone; this.desc = desc; } @Override public Serializable getValue() { return this.phone; } @JsonValue public String getDesc(){ return this.desc; } }
注意:
- @JsonValue是使用JackSon解析时有效,若使用fastjson,请看官方文档提供的解决方案
- 不要把@JsonValue打成@JsonView了,否则自动关联注入的是枚举名(name属性),如下所示
- 别忘记实现IEnum接口,否则自动关联注入的是枚举名(name属性),如下所示
{ id: "1", name: "张三", age: "十八岁", phone: "CT" }
2.将User实体中的属性替换为枚举,例如
public class User { private String id; private String name; private AgeEnum age; private PhoneEnum phone; //省略getter&setter&constructor ... }