springMvc和mybatis-plus中枚举值和字段的映射
作者: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的资料请关注脚本之家其它相关文章!
