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 request.getParameter中文乱码解决方法

    java request.getParameter中文乱码解决方法

    今天跟大家分享几个解决java Web开发中,request.getParameter()获取URL中文参数乱码的解决办法,需要的朋友可以参考下
    2020-02-02
  • Java读取json数据并存入数据库的操作代码

    Java读取json数据并存入数据库的操作代码

    很多朋友问大佬们JAVA怎么把json存入数据库啊,这一问题就把我难倒了,纠结如何操作呢,下面小编把我的经验分享给大家,感兴趣的朋友一起看看吧
    2021-08-08
  • java实现单机限流

    java实现单机限流

    这篇文章主要为大家详细介绍了java实现单机限流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java中Array List与Linked List的实现分析

    Java中Array List与Linked List的实现分析

    这篇文章主要给大家介绍了关于Array List与Linked List实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 通过Java实现bash命令过程解析

    通过Java实现bash命令过程解析

    这篇文章主要介绍了通过Java实现bash命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • SpringBoot实现License生成和校验的过程详解

    SpringBoot实现License生成和校验的过程详解

    在我们向客户销售商业软件的时候,常常需要对所发布的软件实行一系列管控措施,诸如验证使用者身份、软件是否到期,以及保存版权信息和开发商详情等,所以本文给大家介绍了SpringBoot实现License生成和校验的过程,需要的朋友可以参考下
    2024-09-09
  • Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    这篇文章主要为大家详细介绍了java精品项目-瑞吉外卖订餐系统,此项目过大,分为多章独立讲解,本篇内容为新增菜品和分页查询功能的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java项目中如何引入Hutool工具类并正确使用它

    Java项目中如何引入Hutool工具类并正确使用它

    Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,这篇文章主要给大家介绍了关于Java项目中如何引入Hutool工具类并正确使用它的相关资料,需要的朋友可以参考下
    2024-01-01
  • SpringBoot实现定时任务和异步调用

    SpringBoot实现定时任务和异步调用

    这篇文章主要为大家详细介绍了SpringBoot实现定时任务和异步调用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • MyBatis实践之DAO与Mapper

    MyBatis实践之DAO与Mapper

    MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架.通过本文给大家介绍MyBatis实践之DAO与Mapper的相关知识,需要的朋友参考下吧
    2016-03-03

最新评论