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

 更新时间:2023年05月28日 12:02:05   作者:forest  
这篇文章主要为大家介绍了springMvc和mybatis-plus中枚举值和字段的映射示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

DB和entity之间的映射

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

  • 1.使用@JsonCreator,可以将前台的属性值直接转换为枚举类型
  • 2.@EnumValue 将枚举中的指定的值直接存储到数据库,不需要再手动转换
  • 3.@JsonValue 后台返回前台数据时也不需要转换,可以直接返回指定的值

案例:

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的资料请关注脚本之家其它相关文章!

相关文章

  • java.util.Date与java.sql.Date的区别

    java.util.Date与java.sql.Date的区别

    这篇文章主要介绍了java.util.Date与java.sql.Date的区别的相关资料,需要的朋友可以参考下
    2015-07-07
  • TKMybatis的介绍和使用详解

    TKMybatis的介绍和使用详解

    TKMybatis 是基于 Mybatis 框架开发的一个工具,本文主要介绍了TKMybatis的介绍和使用详解,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作,感兴趣的可以了解一下
    2021-12-12
  • Springboot快速入门教程

    Springboot快速入门教程

    今天给大家带来的是关于Springboot基础的相关知识,文章围绕着Springboot的基础知识及用法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java中的equsals和==

    Java中的equsals和==

    这篇文章主要介绍了Java中的equsals和==的相关内容,感兴趣的朋朋友可以参考下文
    2021-08-08
  • 详解 Java 中 equals 和 == 的区别

    详解 Java 中 equals 和 == 的区别

    这篇文章主要介绍了详解 Java 中 equals 和 == 的区别的相关资料,equals 和 == 都是用来检测两个字符串是否相等,返回值也都是布尔型,但是两者在内部比较的处理中却不尽相同需要的朋友可以参考下
    2017-03-03
  • java数据结构图论霍夫曼树及其编码示例详解

    java数据结构图论霍夫曼树及其编码示例详解

    这篇文章主要为大家介绍了java数据结构图论霍夫曼树及其编码示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • screw Maven插件方式运行时在编译打包时跳过执行的问题解决方法

    screw Maven插件方式运行时在编译打包时跳过执行的问题解决方法

    这篇文章主要介绍了screw Maven插件方式运行时在编译打包时跳过执行的问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • SpringBoot 如何编写配置文件

    SpringBoot 如何编写配置文件

    这篇文章主要介绍了SpringBoot 编写配置文件的两种方法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11
  • springSecurity之如何添加自定义过滤器

    springSecurity之如何添加自定义过滤器

    这篇文章主要介绍了springSecurity之如何添加自定义过滤器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Springboot整合Swagger3全注解配置(springdoc-openapi-ui)

    Springboot整合Swagger3全注解配置(springdoc-openapi-ui)

    本文主要介绍了Springboot整合Swagger3全注解配置(springdoc-openapi-ui),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论