【JAVA】自动生成常量类、自动生成所需代码(附源码)

文章目录

更多相关内容可查看

在一个阳光明媚的下午,接到一个需求,大家都觉得自己去定义全局变量比较麻烦,后期维护也比较麻烦,所以能不能自动生成一下

思路:选择一个想操作的表单或者页面,然后可选择所选择表单的字段及表名,制作两个按钮,一个按钮是去自动生成一个文本,在页面展示可复制,另一个按钮是生成一个java文件,这样对于开发者不管是直接使用java文件还是拷贝这个文本都比较方便,详细可看下方代码

生成文本可拷贝

java 复制代码
public class ConstantClassGenerator {
    
    private void createJavaTxt(Map<String, String> logNameMap, String tableName) {
        StringBuilder result = new StringBuilder("package " + PACKADDRES + ";\n\npublic class " + getTableName(tableName) + "Constants {\n");
        logNameMap.forEach((columnName, fieldName) -> {
            result.append("    /**\n     * ").append(fieldName).append("\n     */\n")
                  .append("    public static final String ").append(toConstantName(columnName)).append(" = \"").append(columnName).append("\";\n");
        });
        result.append("}\n");

        CodeEdit codeEdit = this.getView().getControl("hifi_codeeditap");
        codeEdit.setText(result.toString());
      
    }

    @NotNull
    private String getTableName(String tableName) {
        int index = tableName.indexOf("hifi_");
        return toConstantName(index != -1 ? tableName.substring(index + "hifi_".length()) : tableName);
    }

    private static String toConstantName(String columnName) {
        StringBuilder result = new StringBuilder();
        Arrays.stream(columnName.split("_")).filter(word -> !word.isEmpty()).forEach(word -> {
            result.append(Character.toUpperCase(word.charAt(0)))
                  .append(word.substring(1).toLowerCase());
        });
        return result.toString();
    }
}

效果如图:

生成java文件到桌面

java 复制代码
public class ConstantClassGenerator{
    
    public static final String PACKADDRES = "com.xxx.xxxx.xxx";

    private void createJavaClass(Map<String, String> maps, String tableName) {
        String tableNameNew = getTableName(tableName);
        String fileName = tableNameNew + "Constants.java";
        String fullPath = System.getProperty("user.home") + "/Desktop/" + fileName;

        try (FileWriter writer = new FileWriter(fullPath)) {
            writer.write("public class " + tableNameNew + "Constants {\n");
            maps.forEach((columnName, fieldName) -> {
                try {
                    writer.write("    /**\n     * " + fieldName + "\n     */\n");
                    writer.write("    public static final String " + toConstantName(columnName) + " = \"" + columnName + "\";\n");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
            writer.write("}\n");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String toConstantName(String columnName) {
        StringBuilder result = new StringBuilder();
        Arrays.stream(columnName.split("_")).filter(word -> !word.isEmpty()).forEach(word -> {
            result.append(Character.toUpperCase(word.charAt(0)))
                  .append(word.substring(1).toLowerCase());
        });
        return result.toString();
    }
}

效果如图:

应用场景

  1. 快速原型开发

    • 描述:在项目初期,开发者可以使用代码生成工具快速创建原型,以便于测试概念和功能。
    • 工具:如 Spring Initializr、JHipster 等,可以快速生成基本的项目结构和样板代码。
  2. 代码重复性任务

  • 描述:对于常见的 CRUD 操作,自动生成代码可以减少手动编码的时间和错误。
  • 工具:如 MyBatis Generator、Hibernate Tools 等,可以自动生成实体类、数据访问层和映射文件。
  1. 微服务架构

    • 描述:在微服务架构中,通常需要多个服务间的标准化接口,自动生成 API 文档和代码可以提高效率。
    • 工具:OpenAPI Generator 可以从 OpenAPI 规范生成服务接口代码。
  2. 代码模板

    • 描述:使用代码生成器生成符合特定规范的代码模板,确保团队成员的一致性。
    • 工具:如 Apache Velocity、Freemarker 等,可以根据预定义模板生成代码。
  3. 框架集成

    • 描述:集成各种框架(如 Spring、Hibernate 等)时,自动生成所需配置和基础代码可以加快开发速度。
    • 工具:如 Spring Boot 的自动配置功能,可以根据项目需求生成必要的配置文件。
  4. 数据库表结构变更

    • 描述:当数据库表结构发生变化时,自动生成对应的 Java 实体类和数据库迁移代码可以保持一致性。
    • 工具:Liquibase 或 Flyway 可以帮助管理数据库迁移,同时生成相应的实体类。
  5. 单元测试

    • 描述:自动生成单元测试代码可以确保代码的可测试性,并提高代码的质量。
    • 工具:JUnit 和 Mockito 的集成工具可以根据现有代码自动生成测试代码。
  6. 文档生成

    • 描述:通过自动化工具生成 API 文档或代码注释,提高文档的准确性和时效性。
    • 工具:Swagger 和 Javadoc 可以自动生成接口文档和代码注释。
  7. 领域特定语言 (DSL)

    • 描述:为特定领域创建 DSL,并通过代码生成器将 DSL 转换为 Java 代码,从而实现业务逻辑的快速开发。
    • 工具:ANTLR、Xtext 等可以用于构建 DSL 解析器和代码生成器。
  8. 代码迁移与重构

  • 描述:在进行系统迁移或重构时,自动生成代码可以帮助重用旧系统的逻辑,减少手动迁移的工作量。
  • 工具:如 JDepend、SonarQube 等工具可以帮助分析旧代码并生成重构建议。

按照上述的原理,不管我们想自动生成什么java文件或者一些公共的代码都可以去实现,主要的应用场景还是方便项目管理以及提升开发效率

相关推荐
良木生香3 小时前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
老神在在0013 小时前
Spring Bean 的六种作用域详解
java·后端·spring
仙草不加料3 小时前
互联网大厂Java面试故事实录:三轮场景化技术提问与详细答案解析
java·spring boot·微服务·面试·aigc·电商·内容社区
程序员老邢3 小时前
【技术底稿 19】Redis7 集群密码配置 + 权限锁死 + 磁盘占满连锁故障真实排查全记录
java·服务器·经验分享·redis·程序人生·微服务
Bug 挖掘机3 小时前
一篇理清Prompt,Skill,MCP之间的区别
开发语言·软件测试·python·功能测试·测试开发·prompt·ai测试
寒秋花开曾相惜3 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.4 Y86-64异常&4.1.5 Y86-64程序)
开发语言·jvm·数据结构·笔记·学习
落魄江湖行3 小时前
基础篇一 Java 有了 int 为什么还要 Integer?它们到底差在哪?
java·面试·八股文
码界筑梦坊4 小时前
302-基于Python的安卓应用市场数据可视化分析推荐系统
开发语言·python·信息可视化·毕业设计·fastapi
齐鲁大虾4 小时前
新人编程语言选择指南
javascript·c++·python·c#
LiLiYuan.4 小时前
【Java 6种线程状态】
java·开发语言