java 常量的位运算使用案例

在编码的过程中,有时因业务逻辑需要,一个关键字有多个数值,且在调用过程中,此关键字数值对应的各位数值有不同的业务需求,就需要对常量进行位运算;

eg:有关键字status,其中(注:位指二进制运算对应的位):

位1:是否被屏蔽?            1-是,0-否

位2:是否包含视频?         1-是,0-否

位3:是否审核通过?         1-是,0-否

位4:是否已删除?             1-是,0-否

位5:是否有过审核动作?  1-是,0-否

位6:是否将帖子显示在未登陆状态下的列表中?1-是,0-否

可定义如下常量类:

public class GlobalConstantsUtil {
/**
* Constants defined for [BLOG] table, [status] field.
*/
public static final Long BLOG_SHIELD = 1L;
public static final Long BLOG_HAS_VIDEO = 2L;
public static final Long BLOG_AUDITED = 4L;
public static final Long BLOG_DELETED = 8L;
public static final Long BLOG_HAS_AUDITOPERATION = 16L;
public static final Long BLOG_SHOWONHOMEPAGE = 32L;
}

在执行业务时,需求为:未被屏蔽,通过审核,未删除,将帖子显示在未登陆状态下的列表中。

可设置如下变量,通过位运算得出相关值:

Long blogExpected = GlobalConstantsUtil.BLOG_AUDITED | GlobalConstantsUtil.BLOG_SHOWONHOMEPAGE;   //审核通过,将帖子显示在未登陆状态下的列表中  36L
Long excluedStatus = GlobalConstantsUtil.BLOG_SHIELD | GlobalConstantsUtil.BLOG_DELETED;                          // 被屏蔽,被删除   9L

执行sql语句:

@Query(nativeQuery = true, value = "select * from blog where transfer = 0 and (status & (?1) = (?1)) and (status & (?2) != (?2))  ORDER By create_time desc limit 0, 10")

List<Blog> getBlogListForNotLoginUsers(Long blogExpected, Long excludedStatus);

原文地址:https://www.cnblogs.com/qqzhulu/p/10152902.html