项目场景:
页面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;
}
}