一、传统用户状态设置
传统的数据库表中,涉及到状态的字段时,通常都会第一反应就是将其设置为0和1来表示。比如需求是,设计一张表来检查用户状态(绑定邮箱,绑定手机,实名认证,是否已经开通VIP),我以前会这样设计Java类。
UserInfo
@Getter
@Setter
public class UserInfo extends baseDomain{
private boolean realAuth;
private boolean bindPhone;
private boolean bindEmail;
private boolean vip;
}
如果是用0和1来表示,咋看起来挺合理的,但是仔细想想,是否真的能够满足我们的需求?(也不符合我们作为完美主义者的追求)
二、使用二进制来表示状态
我们使用二进制来表示状态看看效果。首先给每一个状态指定分配一个二进制,如
boolean realAuth 0001;
boolean bindPhonge 0010;
boolean vip 1000;
boolean bindEmail 0100; 那还有一个问题,就是在数据库中,使用int类型还是long类型?
诚然,初始状态码(javaint 32 long 64),int可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。