SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据

SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据

最近项目当中大量使用到枚举,特此记录下项目当中使用枚举的好处,场景,使用方式。

枚举的好处

  1. 可读性高, 易理解
  2. 统一参数类型,避免传参错误
  3. 线程安全,全局唯一,无法修改

枚举使用场景

在实际的使用当中,当某个对象或者某个属性,需要有多个可供选择的状态或者描述,例如人的性别,支付的状态,错误的类型等等,都可以使用枚举。

枚举在项目中的使用

通常在项目当中会存在两种形式的枚举

第一种形式

/** * 性别枚举 * * @author hjljy */ @Getter public enum SexEnum { /** * 性别枚举 */ DEFAULT(-1, "保密"), WOMAN(0, "女"), MAN(1, "男"); @EnumValue //标记存储到数据库的值 @JsonValue //标记json返回的值 private final Integer code; private final String remark; SexEnum(Integer code, String remark) { this.code = code; this.remark = remark; } }

第二种形式

/** * 用户类型枚举 * * @author hjljy */ public enum SysUserTypeEnum { /** * 超级管理员 */ SUPER_ADMIN, /** * 系统管理员 */ SYS_ADMIN, /** * 普通管理员 */ ADMIN, /** * 普通账号 */ NORMAL }

第一种形式,通常是使用的自定义的属性(code,remark)来进行判断和保存到数据库的
第二种形式,是直接使用的SUPER_ADMIN 这个实例来判断和保存的。

实体类的枚举字段保存到数据库,并且返回时自动映射到枚举属性上

如果是第一种形式的枚举,Mybatis-plus提供了相关的处理方式,可以进行枚举保存和隐射处理。官方文档地址:mybatis-plus枚举处理
具体处理方式:
第一步,用@EnumValue 标记响应要保存在数据库的值。
第二步,springboot配置文件当中添加配置

mybatis-plus: # 支持统配符 * 或者 ; 分割 切换成自己枚举所在的包 typeEnumsPackage: com.baomidou.springboot.entity.enums

如果是第二种形式的枚举,没有任何自定义的字段,无需任何操作,直接正常保存和返回就可以,保存到数据库的内容就是枚举类型的名称,例如:SUPER_ADMIN ,SYS_ADMIN。

实体类枚举字段返回给前端

第一种形式的枚举,在需要返回的字段上添加@JsonValue //标记为json返回的值 注意:只能返回一个字段,不能返回多个。
第二种形式,无需处理。

实体类枚举字段接收前端参数

第一种形式的枚举,在添加了@JsonValue注解的情况下,直接接受对应字段的值即可正确的封装。例如:当前端传入的值是'1','0','-1'就会自动映射。
第二种形式,无需处理。

注意事项说明

1 枚举的比较,第二种形式的枚举在和字符串进行比较时,需要用到name()方法,例如:

SysUserTypeEnum.SUPER_ADMIN.name().equels("SUPER_ADMIN")

2 无法接收前端的数字类型,或者无法接收的数字类型最后映射的结果错乱,报错等情况,让前端将数字类型转成string类型传给后端即可。原因是因为,枚举类型映射如果是数字类型会去根据角标进行匹配,角标是从0开始的,所以尽管你使用@JsonValue标记的是Intger code,但是还是会根据角标去匹配,所以需要转成string。

存储到数据库的类型

目前项目当中基本上是存的int类型,即枚举当中的code值,但是发现非常的不友好,每次看数据库的时候都不知道代表什么,建议经量避免存int,可以考虑使用string类型。虽然int占用空间小,但是这点空间意义不大,而且枚举类字段添加索引的意义不大


标题:SpringBoot+Mybatis-plus:使用枚举接收参数并返回数据
作者:hjljy
地址:https://www.aliuying.com/articles/2021/04/16/1618556817398.html

评论

取消