实体类枚举属性持久化到数据库
1.@EnumValue
2.配置
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
或
mybatis-plus:typeEnumsPackage: xxx
实体类中枚举属性自动转为@EnumValue标记的属性值
从数据库查实体类枚举属性
1.@EnumValue
2.配置mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
或
mybatis-plus:typeEnumsPackage: xxx
数据库中属性值,自动转换为实体类中的枚举属性(对象)
前端请求接口返回实体(包含枚举属性)
@JsonSerialize(using = ToStringSerializer.class)
实体类的枚举属性序列化为toString方法,可自定义返回json,如:
{ "code": 0, "msg": null, "data": { "id": null, "testEnum": "{code:1, desc:'a'}" } }
前端通过json传枚举值到接口中自动转换为实体的枚举类属性对象
@RequestBody TestEnumEntity testEnumEntity
@JsonDeserialize(using = BaseEnumDeserializer.class)
附上代码:
- 枚举公共接口
- 枚举
- 实体类
- 枚举反序列化器
public class BaseEnumDeserializer extends JsonDeserializer {
@Override
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
JsonNode value = jsonParser.getCodec().readTree(jsonParser);
String currentName = jsonParser.currentName();
Object currentValue = jsonParser.getCurrentValue();
Class findPropertyType = BeanUtils.findPropertyType(currentName, currentValue.getClass());
if (findPropertyType.isEnum()) {
BaseEnum[] enumConstants = (BaseEnum[]) findPropertyType.getEnumConstants();
for (BaseEnum e : enumConstants) {
if (e.getValue().toString().equals(value.asText())) {
return e;
}
}
}
return null;
}
}
- 测试接口
@Slf4j
@RestController
@RequestMapping("/test/enum")
public class TestEnumController {
@Autowired
TestEnumEntityMapper testEnumEntityMapper;
@RequestMapping("/save")
public R<String> save() {
TestEnumEntity testEnumEntity = new TestEnumEntity();
testEnumEntity.setTestEnum(TestEnum.A);
int insert = testEnumEntityMapper.insert(testEnumEntity);
return R.ok("insert:" + insert);
}
@RequestMapping("/get")
public R<String> get() {
TestEnumEntity testEnumEntity = testEnumEntityMapper.selectById(1603210329657991170L);
return R.ok("get:" + testEnumEntity.toString());
}
@RequestMapping("/queryWrapper")
public R queryWrapper() {
LambdaQueryWrapper<TestEnumEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TestEnumEntity::getTestEnum, TestEnum.A);
return R.ok(testEnumEntityMapper.selectList(wrapper));
}
@RequestMapping("/querySql")
public R querySql() {
// return R.ok(testEnumEntityMapper.selectByEnumCode(TestEnum.A));//ok
TestEnumEntity testEnumEntity = new TestEnumEntity();
testEnumEntity.setTestEnum(TestEnum.B);
return R.ok(testEnumEntityMapper.selectByEntity(testEnumEntity));//OK
}
@RequestMapping("/getEnum")
public R<TestEnumEntity> getEnum() {
TestEnumEntity testEnumEntity = new TestEnumEntity();
testEnumEntity.setTestEnum(TestEnum.A);
return R.ok(testEnumEntity);
}
@RequestMapping("/saveEnum")
public R saveEnum(@RequestBody TestEnumEntity testEnumEntity) {
System.out.println(testEnumEntity);
return R.ok(testEnumEntity);
}