springbootalready

Spring Boot 实体类巧用枚举类型字段

2019-06-18  本文已影响0人  anyesu

前言


定义表结构的时候经常会碰到一类字段:状态 ( status 或者 state ) 、类型 ( type ) ,而通常的做法一般是:

然后项目中可能会充斥着下面这样的代码:

order.setStatus((short) 1);

if (order.getStatus() == 1) {
    order.setStatus((short) 2);
}

if (order.getStatus() == 4) {
    order.setStatusName("已收货");
}

这都是些什么魔鬼数字啊,没有注释根本没法看,如果手滑可能状态就设错了,而且不好排查是在哪处赋值的。

改进方案是用 常量 ,但是又会产生另一种效果:

public static final Short WAIT_PAY = 1;

if (WAIT_PAY.equals(order.getStatus())) {
    // 混用了解下
    order.setStatus((short) 2);
}

这时候就该 枚举 出场了,枚举 的本质就是 类 + 常量 ,可以使用 枚举 来定义 一组 相关的元数据 ( 值、描述及其他必要信息 ) ,使用 枚举 类型不仅减小了数据维护 ( 比如调整了值的定义 ) 的成本,还加强了代码的 约束力

下文就来介绍如何在项目中 "完美" 使用 枚举 类型。

需要修改的地方


主要是这三处地方的改动,其他地方按需调整。

准备工作


解析 RequestParam


这部分比较简单。

处理 RequestBody 和 ResponseBody


RequestBodyResponseBody 的解析依赖于 HttpMessageConverter。因为我使用 FastJson 作为 序列化框架,所以只需要针对 FastJsonHttpMessageConverter 做配置。

DAO 层处理


由于使用 Mybatis 作为 ORM 框架,这里使用 Mybatis 提供的 TypeHandler 实现 枚举类型序列化反序列化

源码


篇幅有限,上面代码并不完整,点击 这里 查看完整代码。

结语


通过这个小小的优化,对于代码的简洁性和健壮性带来的效果还是不错的。


转载请注明出处:https://www.jianshu.com/p/34212407037e

上一篇 下一篇

猜你喜欢

热点阅读