0
点赞
收藏
分享

微信扫一扫

SpringBoot和MyBatisPlus中枚举自动转换

一、请求参数自动转换

@Getter
public enum UserType{

BACKEND(1, "后台"),
FRONT(2, "前台"),

;

@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}

@EnumValue
private final Integer val;
@JsonValue
private final String desc;

}

@Data
@TableName("demo")
@Accessors(chain = true)
public class Demo {

@TableId
private Integer id;

private String name;

private Integer age;

private UserType userType;

}

@Api
@RequestMapping("/demo")
@RestController
public class DemoController {

@Resource
private DemoService demoService;


@ApiOperation("根据id获取数据")
@GetMapping("/{id}")
public R<Demo> getById(@PathVariable Integer id) {
Demo demo = demoService.getById(id);
return R.ok(demo);
}


@ApiOperation("测试枚举")
@PostMapping("/testEnum")
public R<Demo> testEnum(@RequestBody Demo demo) {
return R.ok(demo);
}

}

二、MyBatisPlus枚举转换

版本依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>

yml配置

mybatis-plus:
#扫描,多个package用逗号或者分号分隔
typeEnumsPackage: com.taco.springcloud.*.enums

使用方法

  1. 使用枚举​​@EnumValue​

@Getter
public enum UserType{

BACKEND(1, "后台"),
FRONT(2, "前台"),

;

@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}

@EnumValue
private final Integer val;
@JsonValue
private final String desc;

}

  1. 实现接口​​IEnum<T>​

@Getter
public enum UserType implements IEnum<Integer> {

BACKEND(1, "后台"),
FRONT(2, "前台"),

;

@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}

private final Integer val;
@JsonValue
private final String desc;

@Override
public Integer getValue() {
return val;
}
}

三、可能存在的问题

如果数据库中使用的​​tinyint(1)​​​那么在​​mybatis​​​将会映射为​​boolean​​​,使用​​Integer​​​作为枚举类的值会映射失败,一值为​​Null​

解决方法

  1. 使用​​tinyint(4)​​​,因为​​tinyint(1)​​​和​​tinyint(4)​​占用的空间是一样,故没有影响。
  2. 在数据连接参数加上​​tinyInt1isBit=false​


举报

相关推荐

0 条评论