java连接mysql查询字段超长_web开发中,巧妙解决数据库字段过多的问题:Java位操作...

在web开发过程中,我们大多都会碰到类似这样一个问题:(p2p)一个【标的】中,是否新手标,是否加息标,是否逻辑删除 等等,一般开发者会给定3个字段分别存储,但是当以后业务扩展了 是否满标,是否生成回款表... 这就无止境了。其实,我们仔细分析不难发现:是否新手标/加息标/逻辑删除 这些维度的值都是一样的:要么是,要么不是。这与计算机世界的 0/1 非常吻合,今天也是以 0/1为切入点来解决此类问题。

计算机是 0/1 的世界: 10对应十进制2,100对于十进制4,1000对应十进制8,而1000(二进制数) 已经可以表示4个维度了(一个位表示一个维度)。

Java中位与运算符 ( & ) ,两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。我我们可以利用这个特性来做校验/判断等操作。

Java中位或运算符 ( | ) , 两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。我们可以利用这个特性来做一些设定操作。

基于以上原理我们便可以写出以下代码:

adeefd769d5ef668732b3f1c59a554b2.png标 属性操作类

对于数据库的话我们只需要一个字段(attr)就够了,写代码的时候我们只需要

AssetProperty property = new AssetProperty();property.setNewer(); //设置新手标property.setAddRate(); //设置为加息标

然后将AssetProperty 的val值入库attr字段即可。

那怎么判断已入库的attr是否符合某一维度呢,比如判断是否是新手标,代码如下:

AssetProperty property = new AssetProperty(attr); //attr为数据库取出的值property.isNewer(); //返回true而property.isDel(); 肯定是返回false的。

数据库对应的操作也是有模有样的,sql语句如下:

select * from table where attr & 2 = 2 ;

Java位操作还可以解决后续扩展的问题,程序中我们可以看出目前只用到了三个维度 1 << 3,即2^3=8,java的Long类型最多能支持多少个维度就不用我说了吧,扩展空间还是非常充足的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值