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


    一、前言

    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 内部类,并且生成了对应的字符串常量,这样当我们的属性名变动之后也能立即发现关联的使用点。

  • 相关阅读:
    8.7 迁移学习域适应
    【大数据分析专业之基于python的企业数据大屏可视化分析系统-哔哩哔哩】 https://b23.tv/hUraRJV
    搭建Eureka高可用集群 - day03
    让BI自动生成零售数据分析报表?用模板
    Python数据分析之pandas(保姆级教程)
    电路设计篇【5】MOS管驱动电路设计,如何让MOS管快速开启和关闭?
    SpringCloud-Gateway
    微服务之Eureka
    Kotlin - 协程调度器 CoroutineDispatcher
    lvs负载均衡
  • 原文地址:https://blog.csdn.net/duzm200542901104/article/details/126971936