Java、Mysql、MyBatis 中枚举 enum 的使用

1. 当年我们怎么定义状态

我们定义状态变量时,通常需要约定几个状态,比如交易订单中,我们就有常见的创建、交易中、支付成功、支付失败等等状态,当年我们都是约定好 0,1,2,3,4,5 这样的字段来表示上述几个字段。

1.1 数据库设计

例如我们的数据库设计时,直接这样描述:

CREATE TABLE `order_test`  (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `status` int(1) NOT NULL COMMENT '0-创建,1-支付中,2-支付成功,3-支付失败,4-取消订单',
  PRIMARY KEY (`id`) USING BTREE
)
SQL

0-创建,1-支付中,2-支付成功,3-支付失败,4-取消订单 这就是我们的约定了。

当然也有恶心的设计数据库直接使用 varchar 数据类型,这就更恶心了,搜索都不好了。

1.2 Java Bean 代码

在 Java 中我们代码这样写:

public class OrderInfo {
    private int id;
    //0-创建,1-支付中,2-支付成功,3-支付失败,4-取消订单
    private int status;
}
Java

有时候牛逼点,我们定义点常量:

public interface class OrderConstants {
    //创建
    int ORDER_STATUS_CREATE = 0;
    //支付中
    int ORDER_STATUS_PAYING = 1;
    //支付成功
    int ORDER_STATUS_IN_PROGRESS = 2;
    //支付失败
    int ORDER_STATUS_FAILED = 3;
    //取消订单
    int ORDER_STATUS_REVERSED = 4;
}
Java

1.3 MyBatis 代码

然后用 MyBatis 插入查询什么的时候也简单:

@Mapper
public interface OrderMapper {
    int addOrder(@Param("item") OrderInfo info);
    OrderInfo getOrderById(@Param("id") String id);
}
Java
<insert id="addOrder" parameterType="com.yulaiz.model.order.entity.OrderInfo">
    INSERT INTO order_test ( status )
    VALUES (
        #{item.status}
    )
</insert>
<select id="getOrderById" resultType="com.yulaiz.model.order.entity.OrderInfo">
    SELECT id, status
    FROM order_test
    WHERE id = #{id}
</select>
XML

1.4 代码效果

我们最后拿到的就是 0,1,2,3,4 这样的数值来表示订单状态了,当然现在的例子实在简单,实际项目中,那可不仅仅就这么 0-4,还有很多,并且一个订单的状态,可不仅仅就这些,还有其他字段来描述,那么在一些复杂的查询中,那就乱套了,一堆状态,都是数字,没办法一个个查吧,这可是真麻烦。

zjuser

发表评论

电子邮件地址不会被公开。 必填项已用*标注