开发日记----二进制存储数据

项目场景:

	页面8个勾选框,将选中的内容寸到数据库

问题描述

起初我将8个复选框用字符串加分割符“,” 拼接存入数据库(“类型1,类型2,类型3”)
数据库使用varChar存储。下面是我的优化方案


二进制 省字段,省带宽,提效率.:

超级解决方案 使用二进制进行存储,数据库使用tinyint

/*
* 我前端勾选TYPE1,TYPE2 ,前端将 00000001和00000010 相加转为十进制得到3
* 后端收到3 存入数据库
* 查询时,查出3 将3传给前端,前端通过十进制转2进制,勾选对应的类型
* */

public enum TypeEnum {
    //00000001  前端使用 00000001 表示当前类型
    TYPE1(1, "类型1"),
    //00000010
    TYPE2(1 << 1, "类型1"),
    //00000100
    TYPE3(1 << 2, "类型1"),
    //00001000
    TYPE4(1 << 3, "类型1"),
    //00010000
    TYPE5(1 << 4, "类型1"),
    //00100000
    TYPE6(1 << 5, "类型1"),
    //01000000
    TYPE7(1 << 6, "类型1"),
    //10000000
    TYPE8(1 << 7, "类型1");

    public int value;
    public String name;

    TypeEnum(int value, String name) {
        this.value = value;
        this.name = name;
    }

    // 新增添加一个类型
    public static int addFlag(int org, TypeEnum newFlag) {
        return org | newFlag.value;
    }

    // 移除一个类型
    public static int removeFlag(int org, TypeEnum oldFlag) {
        return org & (~oldFlag.value);
    }

    // 是否含有当前类型
    public static boolean hasFlag(int org, TypeEnum oldFlag) {
        return (org & oldFlag.value) > 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值