【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文件或者一些公共的代码都可以去实现,主要的应用场景还是方便项目管理以及提升开发效率

相关推荐
kid_sup1 分钟前
C语言错题本
c语言·开发语言
白总Server28 分钟前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
c语言鹌鹑蛋29 分钟前
C++进阶 --- 多继承中的虚表问题
开发语言·c++
姑苏老陈35 分钟前
【Python基础】Python文件处理
开发语言·python·python文件操作
luoluoal37 分钟前
java项目之企业级工位管理系统源码(springboot)
java·开发语言·spring boot
ch_s_t39 分钟前
新峰商城之购物车(一)
java·开发语言
蜜桃小阿雯44 分钟前
JAVA开源项目 校园美食分享平台 计算机毕业设计
java·jvm·spring boot·spring cloud·intellij-idea·美食
黄昏_1 小时前
苍穹外卖Day01-2
java·spring
君莫愁。1 小时前
【Unity】检测鼠标点击位置是否有2D对象
unity·c#·游戏引擎
努力的八爪鱼1 小时前
记录工作中遇到的问题(持续更新~)
java