根据类的属性自动生成该属性名对应的字符串常量值

一、前言

1、mybatis的Mapper.class里面,如果我们使用@Param标签,那么代码里面就需要写一个字符串常量createTime:

Long selectCountByTime(@Param("createTime") Date createTime);

private Date createTime;
2、ES写查询条件的时候,我们一般写的查询如下:
        BoolQueryBuilder query = QueryBuilders.boolQuery();
        if (systemId != null) {
            query.filter(QueryBuilders.termQuery("systemId", systemId));
        }

如果我们的过滤条件非常多,那么就需要写特别多类似于"systemId"的字符串常量

3、MongoDB写查询条件的时候,我们一般写的查询如下:

Query query = new Query(new Criteria("sequenceId").is(sequenceId)).with(Sort.by(Sort.Order.desc("optTime")));

如果我们写的查询条件非常多,那么也需要写特别多的类似于"sequenceId"的字符串常量。

二、困扰

1、如果Javabean的属性非常多,那么代码里面需要写特别多的字符串常量,并且会零散到代码的各个地方

2、如果Javabean的属性名称改变了,无法进行联动的改动,比如我把createTime改成了updateTime,那么我需要全量搜一下代码,找到使用了createTime常量的地方,然后一一修改。

通过上面我们可以发现这些字符串常量都是我们定义的Javabean的一个属性名,那么有没有一种机制可以自动帮我们生成呢?

三、@FieldNameConstants

1、它是一个Lombok的标签,从v1.16.22版本开始,如果项目上引入了Lombok,那么就可以直接使用了。

2、它的实现效果:

定义一个测试类:

@FieldNameConstants
public class Sub {
    private Date createTime;
    private Date updateTime;
    @FieldNameConstants.Exclude
    private Date publishTime;

    public static void main(String[] args) {
        System.out.println(Sub.Fields.createTime);
        System.out.println(Sub.Fields.updateTime);
        //下面一行会报错
        //System.out.println(Sub.Fields.publishTime);
    }
}

运行输出结果:

createTime
updateTime

测试类的编译结果Sub.class:

public class Sub {
    private Date createTime;
    private Date updateTime;
    private Date publishTime;

    public Sub() {
    }

    public static void main(String[] args) {
        System.out.println("createTime");
        System.out.println("updateTime");
    }

    public static final class Fields {
        public static final String createTime = "createTime";
        public static final String updateTime = "updateTime";

        private Fields() {
        }
    }
}

大家发现了没?在Sub类里面新增了Fields 内部类,并且生成了对应的字符串常量,这样当我们的属性名变动之后也能立即发现关联的使用点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值