复选枚举数据库一个字段保存的设计方案

1. 使用技术点
位运算
2. 保存
  • 一. 前端传入枚举列表
{"methods":[1,2]}
  • 二. 与后端的枚举进行校验
public enum MethodEnum {
    METHOD1(1, "东"), //0001
    METHOD2(2,"南"),  //0010
    METHOD3(4,"西"),  //0100
    METHOD4(8,"北");  //1000
    private Integer code;
    private String name;
    MethodEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
    public Integer getCode() {
        return code;
    }
    public String getName() {
        return name;
    }
    
    public static MethodEnum getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (MethodEnum p : values()) {
            if (code.equals(p.getCode())) {
                return p;
            }
        }
        return null;
    }
    public static  List<Integer> convertToBitList(Integer num){
        List<Integer> enumList = new ArrayList<>();
        for (MethodEnum p : values()) {
            int enumCode = p.getCode();
            if ((num&enumCode)==(enumCode)) {
                enumList.add(enumCode);
            }
        }
       return enumList;
    }
}
  • 枚举示例代码如下
    • 按照位运算定义枚举十进制,分别对应其二进制
    • 根据 getByCode()方法校验前端输入的数字是否为枚举列表中的枚举
  • 三. 数据转换
Integer sum = list.stream().reduce(Integer::sum).orElse(0);

-将sum数值存入数据库字段中

(1, “东”), //0001
(2,“南”), //0010
(4,“西”), //0100
(8,“北”), //1000
(3, “东"和"南”), //0011
.
.
以此类推

3. 查询回显
  • 使用枚举中的convertToBitList()方法进行转换,用到的就是位运算(num&enumCode)
    输出的就是复选的枚举编码的列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值