Skip to content

代码生成器,亮点 1.根据数据表格和自定义的模板,生成任意你想生成的代码,避免项目中重复写相似的,大大提高开发效率。2.动态操作模板中的每一个方法,生成你想生成目标文件的任意方法。3.以已有模板中的方法为基础,根据自定义参数,生成类似的代码。

bigbird-0101/code-builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前言

代码生成器.

亮点

1.根据数据表格或自定义变量,和自定义的模板,生成任意你想生成的代码,避免项目中重复写相似的,大大提高开发效率。

2.动态操作模板中的每一个方法,生成你想生成目标文件的任意方法。

3.以已有模板中的方法为基础,根据自定义参数,生成类似的代码。

QUICK START
1.通过代码直接启动 HelloWorld
  1. 创建一个文件,文件名为 hello_world.template

文件内容为

I'm *{helloWorld}*
  1. 引入core 依赖

    <dependency>
        <groupId>io.github.bigbird-0101</groupId>
        <artifactId>code-core</artifactId>
        <version>3.0.4</version>
    </dependency>
    
    package com.fpp.code.core.filebuilder.definedfunction;
    
    import io.github.bigbird0101.code.core.config.StandardEnvironment;
    import io.github.bigbird0101.code.core.context.GenericTemplateContext;
    import io.github.bigbird0101.code.core.factory.TemplateDefinitionBuilder;
    import io.github.bigbird0101.code.core.template.DefaultNoHandleFunctionTemplate;
    import io.github.bigbird0101.code.core.template.Template;
    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.Test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class HelloWorldTest {
        @Test
        public void helloWorld() {
            StandardEnvironment environment=new StandardEnvironment();
            GenericTemplateContext genericTemplateContext =new GenericTemplateContext(environment);
            final Template dao = genericTemplateContext.getTemplate("hello_world");
            Map<String, Object> temp = new HashMap<>(10);
            temp.put("helloWorld","hello world");
            dao.getTemplateVariables().putAll(temp);
            final String templateResult = dao.getTemplateResult();
            Assertions.assertNotNull(templateResult);
        }
    }

解压点击启动codebuilder.exe

image-20220914225842169

可修改data中的模板(模板必须为.template 后缀名) 达到修改生成的内容

项目启动后 image-20220914222145472

参数详解

1.code.properties 配置文件详解

default为数据源的配置名 可通过页面配置

  1. code.datasource.default.url 数据源地址
  2. code.datasource.default.username 数据源用户名
  3. code.datasource.default.password 数据源密码
  4. code.datasource.names=["default2","default3","default","mysql"] 为数据源的集合
  5. code.datasource=mysql 为选中的数据源名
  6. code.project.file.project-author 项目的作者

2.templates.json 配置文件详解

配置的模板 为json数组

  1. fileName 模板文件名(必须与data/template文件名一致)
  2. name 模板的名字
  3. isHandleFunction 是否是能够控制模板中的方法的模板 1-是 0-否
  4. filePrefixNameStrategy 文件的前缀命令策略 (默认)1-从表格名第四个字符开始+源码路径最后一个路径首字母大写 2-从表格名的第四个字符开始 3-根据前缀名表达式生成前缀名
  5. filePrefixNameStrategyPattern 当filePrefixNameStrategy=3 时 这个为最终生成文件的前缀名表达式 *{tableInfo.domainName}*RpcImplService 当 tableInfo.domainName ==你好时 此时文件前缀名为: 你好RpcImplService
  6. fileSuffixName 文件的后缀名 默认 java
  7. ProjectUrl 项目路径
  8. Module 模块路径
  9. sourcesRoot 源码根路径
  10. srcPackage 最终源码包路径
模板详解
  1. 可控制方法模板(DefaultHandleFunctionTemplate)

    定义格式

    *{prefix}*
      模板前缀
    *{/prefix}*
    *{function}*
        方法  
         注意:方法名必须以$$包裹  例如  $getById$
    *{/function}*    
        .
        .
        .
    *{suffix}*
        模板后缀
    *{/suffix}*    
  2. 不可控制方法模板(DefaultNoHandleFunctionTemplate)

    无格式

与easy-code 对比

功能 easy-code spring-code
动态修改生成代码 X
友好的界面 X
灵活的自定义代码 X
什么是动态修改生成代码呢?

1.比如如果一个类中你只想生成其中一个方法,或者在某个类中通过操作界面动态的添加代码。

例如 选中Controller模板,如果Controller 模板已生成文件 选择在文件的末尾处生成 ,那么将在 Controller 模板已生成文件末尾添加一段代码。

2.以某个方法作为模板,然后通过操作界面修改方法,加到其他模板类中

例如 以Controller模板 的getById 作为模板 填写字段 age,name ,因子为id,那么将在Controller 模板已生成文件末尾添加 getByAgeAndName方法的实现 (以getById模板为基础)

如何自定义解析语法呢?

继承 AbstractTemplateLangResolver 自定义其实现就可以了

如何自定义模板实现呢?

1.可以控制方法的动态生成

继承DefaultHandleFunctionTemplate 类 自定义 实现生成模板方法

2.不可以控制方法的模板

继承DefaultNoHandleFunctionTemplate 类 自定义 实现生成模板方法

如何使用自定义方法界面呢?

1.字段名 是用来替代 代表因子中的 值的 如果是多个默认以And连接 ,代码会 使用字段名替换模板方法中所有的代表因子

解析语法

如果要使用语法 必须要使用 *{}* 包裹 代码

if语句

column.size对应TableInfo 的 ColumnInfo的size的值,ColumnInfo还有其他的属性 详情请查看代码

例子

    *{if v-if='!column.isNull'}*
    @NotNull(message = "*{column.comment}*不允许为空")
    *{/if}*
    *{if v-if='column.javaType==String'}*
    @Size(max=*{column.size}*,min=1,message = "*{column.comment}*最大长度为*{column.size}*,至少长度为1")
    *{/if}*
    *{if v-if='column.javaType==Integer'}*
    @Max(value=*{column.size}*,message = "*{column.comment}*最大值为*{column.size}*")
    *{/if}*
foreach 语句

column.domainPropertyName 对应 TableInfo 的 ColumnInfo的domainPropertyName 的值

foreach 还有一个属性 trim 值true false(默认false) 去除两边的逗号

    *{foreach v-for="column in tableInfo.columnList"}*

    public *{column.javaType}* get*{tool.firstUpper(*{column.domainPropertyName}*)}*()
    {
        return *{column.domainPropertyName}*;
    }

    public void set*{tool.firstUpper(*{column.domainPropertyName}*)}*(*{column.javaType}* *{column.domainPropertyName}*)
    {
        this.*{column.domainPropertyName}* = *{column.domainPropertyName}*;
    }
    *{/foreach}*
工具方法

默认实现是 ToolTemplateResolverFunction

  1. *{tool.firstUpper(params)}* 首字母大写 *{tool.firstUpper(ab)}* 首字母大写 Ab
  2. *{tool.upper(params)}* 首字母大写 *{tool.upper(ab)}* 大写 AB
  3. *{tool.firstLower(params)}* 首字母大写 *{tool.firstLower(Ab)}* 首字母大写 ab
  4. *{tool.lower(params)}* 首字母大写 *{tool.lower(Ab)}* 小写 ab
  5. *{tool.currentDateTime()}* 当前系统日期时间
  6. *{tool.author()}* 获取code.properties 中配置的作者
  7. *{tool.allSqlColumn()}* 获取 当前数据表格的所有字段(用于拼接sql)
  8. *{tool.upLevelPath(params)}* 获取 上一级路径 比如包名 com.zzd 的上一级就是 com,com/zzd 为 com
  9. *{tool.sub(str,startIndex,endIndex)}* 支持三种
`*{tool.sub(1,abc)}*  截取index 从1开始到末尾的字符串 bc
`*{tool.sub(abc,2)}*  截取index 从开始到末尾倒数2的字符串 a
`*{tool.sub(abc,1,2)}* 截取startIndex 从开始1到2的字符串 这三种语法  b

如有疑问请加群 948896114

image-20220929222640211

About

代码生成器,亮点 1.根据数据表格和自定义的模板,生成任意你想生成的代码,避免项目中重复写相似的,大大提高开发效率。2.动态操作模板中的每一个方法,生成你想生成目标文件的任意方法。3.以已有模板中的方法为基础,根据自定义参数,生成类似的代码。

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages