Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

code generator

sika-code edited this page Jul 20, 2019 · 3 revisions

code-generator【代码生成器】

What

  • 模板化代码生成器

Why

  • 一键生成模版化代码
  • 减少重复性工作
  • 提高开发效率

How

  • 基于mybatis-plus-generator
  • 基于Freemarker模板构建

示例

1. 依赖

   <dependencies>
        <dependency>
            <groupId>com.lxzl.skull.systemframework</groupId>
            <artifactId>code-generator</artifactId>
            <version>${com.lxzl.skull.version}</version>
        </dependency>
    </dependencies>

2. 配置

@Slf4j
public class GenerateCodeConfig {

    /** 路径配置 */
    private static String projectPrefix = "standard-footer-demo";
    private static String basePackagePathPrefixForJava = "src/main/java/com/lxzl/skull/standard/footer/demo/business";
    private static String basePackagePathPrefixForXml = "src/main/resources/mapper";
    private static String modulePackage = "com.lxzl.skull.standard.footer.demo";

    /** 数据库配置 */
    private static String tablePrefix = "risk_system_";
    private static String dataBaseUrl = "192.168.10.205";
    private static String dataBaseName = "lxzl_risk_system";
    private static String dataBasePort = "3306";
    private static String username = "lxzldev";
    private static String password = "lxzldev";

    // 构建生成代码的数据传输对象
    public static GeneratorCodeDTO buildGeneratorCodeDTO(String tableName, String author) {
        GeneratorCodeDTO generatorCodeDTO = new GeneratorCodeDTO();

        /** 父包 */
        generatorCodeDTO.setParentPackage(modulePackage + ".business")
                .setModulePackage(modulePackage)
                /** common的path */
                .setPathForDataaccess(buildFullPathForJava("dataaccess"))
                /** common类的path */
                .setPathForCommon(buildFullPathForJava("common"))
                /** service类path */
                .setPathForCore(buildFullPathForJava("core"))
                /** web的path */
                .setPathForWeb(buildFullPathForJava("web"))
                /** api的path */
                .setPathForApi(buildFullPathForJava("api"))
                /** xml的path */
                .setPathForXml(buildFullPathForXml("dataaccess"))

                .setDataBaseUrl(dataBaseUrl)
                .setDataBaseName(dataBaseName)
                .setDataBasePort(dataBasePort)
                .setUsername(username)
                .setPassword(password)

                /** 表名 */
                .setTableName(tableName)
                /** 表前缀 */
                .setSubPrefix(tablePrefix)
                /** 作者 */
                .setAuthor(author);

        return generatorCodeDTO;
    }
    
    // 构建生成java文件的全路径
    private static String buildFullPathForJava(String projectSuffix) {
        StringBuilder stringBuilder = buildFullPathCore(projectSuffix, basePackagePathPrefixForJava);
        log.info(projectSuffix + "的全路径为:" + stringBuilder);
        return stringBuilder.toString();
    }

    // 构建生成xml文件的全路径
    private static String buildFullPathForXml(String projectSuffix) {
        StringBuilder stringBuilder = buildFullPathCore(projectSuffix, basePackagePathPrefixForXml);
        log.info(projectSuffix + "的全路径为:" + stringBuilder);
        return stringBuilder.toString();
    }

    // 构建全路径的核心方法
    protected static StringBuilder buildFullPathCore(String projectSuffix, String basePackagePathPrefix) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("/")
                .append(projectPrefix)
                .append("-")
                .append(projectSuffix)
                .append("/")
                .append(basePackagePathPrefix);
        return stringBuilder;
    }

3. 使用

/**
 * 代码生成器启动类
 *
 * @author daiqi
 * @create 2019-07-11 22:32
 */
public class GenerateCodeApplication {
    private static String tableName = "risk_system_access_rule_type";
    private static String author = "zhangsan";

    public static void main(String[] args) {
        GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
        new GenerateCodeHandler().generateCode(generatorCodeDTO);
    }
}


拓展

修改原生成类【例如:dto】

1 src/main/resources下新建templates目录

2 新建dto.java.ftl文件,并复写规则

移除多余类【例如:dto】

1 创建GenerateCodeHandlerCustomer并继承GenerateCodeHandler,重写相关方法

 import com.lxzl.skull.GenerateCodeHandler;
 
 /**
  * @author daiqi
  * @create 2019-07-12 9:32
  */
 public class GenerateCodeHandlerCustomer extends GenerateCodeHandler {
     /** -----------------------以下方式2选1---------------------- */
     /**
      * 方式一:重写生成方法,移除不需要生成类的方法
      */
     @Override
     protected void generateToCommon() {
         // 移除不需要的类
         // generateDTO();
         generateQuery();
         generateConstant();
         generateErrorCodeEnum();
     }
 
     /**
      * 方式二:将不需要生成的类变为空实现
      */
     @Override
     public void generateDTO() {
 
     }
 }

2 使用GenerateCodeHandlerCustomer的对象调用generateCode

 public static void main(String[] args) {
     GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
     new GenerateCodeHandlerCustomer().generateCode(generatorCodeDTO);
 }

添加新类【例如:api】

1 新建模板类【src/main/resources/templates/api.java.ftl】

2 创建GenerateCodeHandlerCustomer并继承GenerateCodeHandler,重写相关方法

 
 /**
  * @author daiqi
  * @create 2019-07-12 9:32
  */
 public class GenerateCodeHandlerCustomer extends GenerateCodeHandler {
      @Override
     protected void generateToWeb() {
         super.generateToWeb();
         generateApi();
     }

     protected void generateApi() {
         String templatePath = "/templates/api_customer.java.ftl";
         String filePath = pathForApi + "/" + moduleName + "/api/";
         String classBodySuffix = "Api";
         String packageKey = "Api";
         String subPackage = "api";
 
         generateCodeCoreForCustomer(templatePath, filePath, classBodySuffix, packageKey, subPackage);
     }
 }

3 使用GenerateCodeHandlerCustomer的对象调用generateCode

 public static void main(String[] args) {
     GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
     new GenerateCodeHandlerCustomer().generateCode(generatorCodeDTO);
 }

常见问题

代码生成后找不到代码文件

  • 检查代码生成器启动类的Configurations中的Working directory是否为项目目录

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.