java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springMvc mybatis-plus

springMvc和mybatis-plus中枚举值和字段的映射

作者:forest

这篇文章主要为大家介绍了springMvc和mybatis-plus中枚举值和字段的映射示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

DB和entity之间的映射

最近看到有人使用这几个注解,就稍微了解了一下各自的用法,发现枚举在前后台传值,DB和entity之间的映射很方便

案例:

User实体

@TableName("user")
@Data
public class User {
  private Integer id;
  private String name;
  private Integer age;
  private SexEnum sex;
}

枚举类

public enum SexEnum {
  MALE(1,"男"),
  FEMALE(2,"女")
  ;
  @EnumValue //数据库中直接存入枚举属性val的值
  private Integer val;
  @JsonValue //序列化枚举对象时,返回其属性desc的值
  private String desc;
  SexEnum(Integer val, String desc) {
      this.val = val;
      this.desc = desc;
  }
  /**
   * 1.通过属性desc获取对应的枚举
   * 2.JsonCreator加在构造方法或者静态方法上,为对象的反序列化指定构造逻辑
   * 3.前端向后台传输json参数,json反序列化成对象时会自动调用这个方法
   */
  @JsonCreator
  public static SexEnum fromDesc(String desc) {
      System.out.println("进入枚举自定义构造方法");
      for(SexEnum sexEnum : SexEnum.values()) {
          if(sexEnum.getDesc().equals(desc)) {
              return sexEnum;
          }
      }
      return null;
  }
  public Integer getVal() {
      return val;
  }
  public void setVal(Integer val) {
      this.val = val;
  }
  public String getDesc() {
      return desc;
  }
  public void setDesc(String desc) {
      this.desc = desc;
  }
}

请求类

@RequestMapping("/getUser")
  @ResponseBody
  public User getUser(User u) {
      //返回数据给前台时,序列化对象时,其中的枚举类型会根据@JsonValue指定的字段进行处理
      User user = userService.getUser();
      return user;
  }
  @RequestMapping("/save_user")
  @ResponseBody
  public String saveUser(@RequestBody User u) {
     //前台传入Sex字符串,直接转换为枚举对象 
     // json反序列化时自动调用了SexEnum中的fromDesc()获取枚举对象,然后赋值给u中的sex
     userService.saveUser(u);
     return "success";
  }

效果图

postman中的入参,一定要使用json格式,使用表单无效果

看到控制台打印了一句话,说明反序列化枚举对象时,使用了我们自定义的方法

可以看到sex属性中的值前端传入的值‘男’,但是后台接收到为SexEnum的"MALE"

数据库中的数据,按照@EnumValue指定的属性存入数据

从数据库中查询的数据,枚举按照我们使用@jsonValue的字段返回值

以上就是springMvc和mybatis-plus中枚举值和字段的映射的详细内容,更多关于springMvc mybatis-plus的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文