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


    一、前言

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

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

    如果我们的过滤条件非常多,那么就需要写特别多类似于"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、它的实现效果:

    定义一个测试类:

    1. @FieldNameConstants
    2. public class Sub {
    3. private Date createTime;
    4. private Date updateTime;
    5. @FieldNameConstants.Exclude
    6. private Date publishTime;
    7. public static void main(String[] args) {
    8. System.out.println(Sub.Fields.createTime);
    9. System.out.println(Sub.Fields.updateTime);
    10. //下面一行会报错
    11. //System.out.println(Sub.Fields.publishTime);
    12. }
    13. }

    运行输出结果:

    createTime
    updateTime

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

    1. public class Sub {
    2. private Date createTime;
    3. private Date updateTime;
    4. private Date publishTime;
    5. public Sub() {
    6. }
    7. public static void main(String[] args) {
    8. System.out.println("createTime");
    9. System.out.println("updateTime");
    10. }
    11. public static final class Fields {
    12. public static final String createTime = "createTime";
    13. public static final String updateTime = "updateTime";
    14. private Fields() {
    15. }
    16. }
    17. }

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

  • 相关阅读:
    css样式操作、动画操作
    前 K 个高频元素
    单片机ADC常见的几种滤波方法
    【Redis】哨兵
    [计算机通信网络]子网掩码
    mysql8.0下载安装配置一条龙,无坑教学yyds
    【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM)
    数据标准的制定落地
    Linux yum 运行时提示编码问题错误
    在win10中下载桌面版的docker并在docker中搭建运行基于linux的容器
  • 原文地址:https://blog.csdn.net/duzm200542901104/article/details/126971936