1. 状态展现方式
1.1. 使用数字标识
适用于值域较少、变化较少,可以采用相似的规则语义来表述的状态,通常一个系统中为了达成一致理解,可以做如下规则定义,这样即使没有状态描述,也可以大致推演出该状态含义:
状态值 | 状态说明 |
---|---|
0 |
行动未开始 |
1 |
行动进行中 |
2 |
行动成功 |
3 |
行动失败 |
4 |
行动取消 |
5 |
行动暂停 |
9 |
行动关闭 |
状态值 | 状态说明 |
---|---|
0 |
资源创建 |
1 |
资源提交 |
2 |
资源有效 |
3 |
资源无效 |
4 |
资源撤销 |
5 |
资源冻结 |
9 |
资源删除 |
1.3. 使用多位存储方式
适用于多维度开关类、经常需要增加维度的场景。
权限定义可以根据位数字符串或者2的mifang
Java操作状态
int i = 1;
int i2 = 2;
#判断第一位的状态是否为1
if((status & i) == i)
#判断
if((status & i2) == i2){
# 第二位的状态是否为1
}else{
# 第二位的状态是否为0
}
# 设置第二位为1
status = status | i2;
# 设置第二位为0
status & (~i2)
SQL操作状态
-- 筛选出第一位的状态为1的数据
select * from user where status & b'0001'
select * from user where status & 1
-- 筛选出第一位的状态为0的数据
select * from user where status ^ b'0001'
select * from user where status ^ 1
-- 设置第一位的状态为1
update status = status | b'0001' from user where id = 1
update status = status | 1 from user where id = 1
-- 设置第一位的状态为0
update status = status & ~b'0001' from user where id = 1
update status = status & ~1 from user where id = 1