# generate-code-plugin **Repository Path**: yxinfo/generate-code-plugin ## Basic Information - **Project Name**: generate-code-plugin - **Description**: 代码生成插件 - **Primary Language**: Kotlin - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-10-30 - **Last Updated**: 2021-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # $\color{#4285f4}{Generate}\color{#ea4335}{-}\color{#fbbc05}{Code}\color{#4285f4}{-}\color{#34a853}{Plugin}$ **$\color{#ff6600}{注:resources/template下的引擎模板代码不能格式化,切记,否则会导致生成的代码格式特别乱!!!}$** #### 介绍 基于gradle构建工具并支持gradle的代码生成插件,生成代码支持类型如下: * 数据库类型 * [x] mysql5.6+ * [x] postgresql12+ * [x] mariadb10+ * [ ] h2 * [ ] sqlite * [ ] mssql * [ ] oracle * [ ] db2 * [ ] sybase * 支持框架及特点 * [x] gradle * [ ] maven * [x] springboot * [x] springmvc * [x] mybatis * [x] mybatis-plus * [x] swagger2 * [x] swagger-bootstrap-ui * [x] knife4j(swagger-bootstrap-ui的新版本,使用过,目前尚存在一些问题,推荐使用原版) * 支持语言 * [x] java * [x] kotlin * [ ] groovy > 生成的代码,在mybatis版本中,是默认直接生成从dao层到controller层的CRUD,mybatis-plus则按照官方代码生成方式 > 目前暂时推荐使用创建独立的gradle文件,并在build.gradle或build.gradle.kts中引用即可。 > 为什么上传到maven仓库?第一次申请被拒绝了,而且也不是很熟悉发布流程,熟悉的可以考虑发布到maven仓库中。 开启swaggerUI如下(仅试用于springboot) java开启swaggerUI文档代码 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; import java.util.List; @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Value("${swagger.enable}") private Boolean enable;// 此处为配置文件中的独立参数,方便部署而已,可去掉 @Bean public Docket createRestApi() { //添加head参数配置start /*ParameterBuilder tokenPar = new ParameterBuilder(); List pars = new ArrayList<>(); tokenPar.name("Authorization").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); pars.add(tokenPar.build());*/ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(enable) .select() .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx.controller")) .paths(PathSelectors.any()) .build(); //.globalOperationParameters(pars); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("RESTful API") .description("swagger-bootstrap-ui") .termsOfServiceUrl("http://localhost:9000/doc.html") .version("1.0.0") .contact(new Contact("author", "company website", "your email")) .build(); } } ``` kotlin开启swaggerUI文档代码 ```kotlin import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import springfox.documentation.builders.ApiInfoBuilder import springfox.documentation.builders.PathSelectors import springfox.documentation.builders.RequestHandlerSelectors import springfox.documentation.service.ApiInfo import springfox.documentation.service.Contact import springfox.documentation.spi.DocumentationType import springfox.documentation.spring.web.plugins.Docket import springfox.documentation.swagger2.annotations.EnableSwagger2 @Configuration @EnableSwagger2 class SwaggerConfiguration { @Value("\${swagger.enable}") private val enable // 此处为配置文件中的独立参数,方便部署而已,可去掉 : Boolean? = null @Bean fun createRestApi(): Docket { return Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(enable!!) .select() .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx.controller")) .paths(PathSelectors.any()) .build() } private fun apiInfo(): ApiInfo { return ApiInfoBuilder() .title("RESTful API") .description("swagger-bootstrap-ui") .termsOfServiceUrl("http://localhost:9000/doc.html") .version("1.0.0") .contact(Contact("author", "company website", "your email")) .build() } } ``` #### 软件架构 1. kotlin; 2. velocity引擎模板; 3. gradle; #### 安装教程 1. git clone; 2. 使用gradle构建; 3. 发布到本地maven仓库; 4. 注意:gradle配置的maven根据实际情况来修改,我设置maven仓库如下: ```groovy // 指定上传的路径(上传到本地maven仓库) def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath uploadArchives { repositories { mavenDeployer { repository(url: localMavenRepo) pom.project { name = project.name packaging = 'jar' description = 'code generate gradle task' } } } } ``` 或者使用命令打全包 ``` gradle jar ``` ![image](/screenshot/upload_to_local_maven.png) #### 使用说明 ##### 在build.gradle中直接使用(推荐创建独立gradle文件并引用) 1. 创建新的项目,引用插件gradle配置如下: ```groovy buildscript { repositories { mavenLocal()// 如果需要独立配置maven仓库地址的,使用 /*maven { url uri(System.getProperty('user.home') + '/.m2/repository')//自定义插件已发布的仓库地址(本地maven仓库) //url uri('自定义maven仓库地址') }*/ //flatDir { dirs 'libs' } } dependencies { //引入自定义task classpath group: 'cn.plugins.generator', name: 'cn-plugins-generator', version: '1.0.0' } } ``` 2. 在工程项目中的gradle配置文件中新增一个task,代码如下: ```groovy task generateCode(type: cn.plugins.generator.task.GenerateCodeTask) { dbType = 'mysql' // 值为mysql或postgresql 由于mariadb为mysql的分支,所以是mariadb的,此处直接填写mysql即可 url = 'localhost' port = '3306' database = 'manager' userName = 'root' password = 'admin123456' frameworkType = "mybatisplus" // mybatis或mybatisplus tablePrefix = 'temp' // 不要带前缀下划线进来 tableName = 'temp_banner,temp_user,temp_user_role'// 多个表使用英文逗号隔开 projectPath = projectDir.path packageName = 'com.example.gencode' controller = "controller" service = 'service' mapper = 'mapper' entity = 'entity' xml = 'mapper' languageType = 'java'// java或kotlin author = 'jiangyun' company = '测试公司' apiPrefix = '/api'// 默认值:/api enableGenerateDoc = true // 是否生成支持swaggerUI2文档 } ``` 3. 生成代码只需运行上述的task即可 ##### 独立gradle文件并引用的方式 1. 在项目根目录下创建一个叫generate.gradle的文件,内容如下: ```groovy buildscript { repositories { mavenLocal()// 这块根据自定义maven地址而定,如果是发布的本地maven库而不是自定义的本地maven库,则直接这样使用即可,否则使用下面被注释的部分 /*maven { url uri(System.getProperty('user.home') + '/.m2/repository')//自定义插件已发布的仓库地址 }*/ maven { url 'https://maven.aliyun.com/repository/public/' }// 必须有,否则会导致依赖失败而无法构建,除非本地maven仓库中包含有全部依赖 } dependencies { //引入自定义task classpath group: 'cn.plugins.generator', name: 'cn-plugins-generator', version: '1.0.0' } } task generateCode(type: cn.plugins.generator.task.GenerateCodeTask) { dbType = 'mysql' // 值为mysql或postgresql 由于mariadb为mysql的分支,所以是mariadb的,此处直接填写mysql即可 url = 'localhost' port = '3306' database = 'manager' userName = 'root' password = 'admin123456' frameworkType = "mybatisplus" // mybatis或mybatisplus tablePrefix = 'temp' // 不要带前缀下划线进来 tableName = 'temp_banner,temp_user,temp_user_role'// 多个表使用英文逗号隔开 projectPath = projectDir.path packageName = 'com.example.gencode' controller = "controller" service = 'service' mapper = 'mapper' entity = 'entity' xml = 'mapper' languageType = 'java'// java或kotlin author = 'jiangyun' company = '测试公司' apiPrefix = '/api'// 默认值:/api enableGenerateDoc = true // 是否生成支持swaggerUI2文档 } ``` 2. 在项目根目录下的build.gradle中添加如下内容: ```groovy apply from: 'generate.gradle' ``` 引用gradle配置到主build.gradle配置文件中即可 想在springboot2.+的kotlin中怎么使用?目前spring官方默认给出的是使用kotlin编写DSL,不熟悉的人,就比较费劲了,文件也不再是以.gradle结束,而是.gradle.kts。 如下的脚本为kotlin编写DSL的使用方式,具体使用方式如下: 在工程目录下创建一个独立的叫generate.gradle.kts的文件,文件脚本内容如下: ```kotlin import cn.plugins.generator.task.GenerateCodeTask buildscript { repositories { mavenLocal() maven { setUrl("https://maven.aliyun.com/repository/public/") } dependencies { //引入自定义task classpath("cn.plugins.generator:cn-plugins-generator:1.0.0") } } } tasks.register(name = "generateCode") { dbType = "mysql"// 值为mysql或postgresql 由于mariadb为mysql的分支,所以是mariadb的,此处直接填写mysql即可 url = "localhost" port = "3306" database = "pagehelper-test" userName = "root" password = "admin1230" frameworkType = "mybatis" // mybatis 或 mybatisplus tablePrefix = "test" // 不要带前缀下划线进来 tableName = "test_login"// 多个表使用英文逗号隔开 projectPath = projectDir.path packageName = "com.example.demo" controller = "controller" service = "service" mapper = "mapper" entity = "entity" xml = "mapper" languageType = "kotlin"// java或kotlin author = "jy" company = "测试公司" apiPrefix = "/api"// 默认值:/api enableGenerateDoc = true // 是否生成支持swaggerUI2文档 } ``` 然后在build.gradle.kts文件中引用该gradle脚本: ```kotlin apply(from = "generate.gradle.kts") // 特殊就在这个地方,这是kotlin编写DSL的脚本,与groovy还是有区别的 groovy的为:apply from: 'generate.gradle' ``` 3. 生成代码只需运行上述的task即可 ![image](/screenshot/generate_gradle.png) #### 生成代码截图如下 1. 生成的kotlin代码 ![image](/screenshot/kotlin.png) 2. 生成的java代码 ![image](/screenshot/java.png) 3. 生成的mapper xml代码 ![image](/screenshot/mybatis.png) #### 参与贡献 1. Fork 本仓库 2. 新建 分支 3. 提交代码 4. 新建 Pull Request