# generate-code-plugin **Repository Path**: jiangyun/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**: 2 - **Forks**: 1 - **Created**: 2020-01-10 - **Last Updated**: 2023-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # $\color{#4285f4}{Generate}\color{#ea4335}{-}\color{#fbbc05}{Code}\color{#4285f4}{-}\color{#34a853}{Plugin}$ **$\color{#ff6600}{注:resources/template下的引擎模板代码不能格式化,切记,否则会导致生成的代码格式特别乱!!!}$** **$\color{#ff6600}{注:文档中的gradle或者kotlin脚本仅仅支持gradle版本范围:5.x~6.x,,7.+版本有时间会出新的支持的脚本文档说明。}$** > 支持gradle7+且支持kotlin DSL的版本已经更新为仓库:https://gitee.com/jiangyun/gradle-mybatis-codegen-plugin, 此仓库代码将不再维护!!! #### 介绍 基于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 * [x] EasyYApi(需要idea安装EasyYapi插件,EasyYApi插件支持导出EasyYApi发布文档和Postman离线文档,至于怎么搭建EasyYapi在线,详情问度娘) * 支持语言 * [x] java * [x] kotlin * [ ] groovy > 生成的代码,在mybatis版本中,是默认直接生成从dao层到controller层的CRUD,mybatis-plus则按照官方代码生成方式 > 目前暂时推荐使用创建独立的gradle文件,并在build.gradle或build.gradle.kts中引用即可。 > 为什么上传到maven仓库?第一次申请被拒绝了,而且也不是很熟悉发布流程,熟悉的可以考虑发布到maven仓库中。 #### 软件架构 1. kotlin; 2. freemarker; 3. gradle; 4. druid; #### idea发布本地maven仓库教程 ![image](/screenshot/upload_to_local_maven.png) #### 使用说明 > 怎么直接在gradle使用可以自己琢磨一下,本文档着重教程是独立gradle脚本文件使用方式,因为可以保持build.gradle的简洁; > 编译好可下载使用的包在源码中的release文件夹下 [点击下载](/release/cn-plugins-generator-1.0.8.jar) 1. 在项目根目录下创建一个叫:``` generate-code.gradle ``` 的文件,脚本内容如下: ```groovy buildscript { repositories { mavenLocal() maven { url 'https://maven.aliyun.com/repository/public/' } } dependencies { classpath 'mysql:mysql-connector-java:8.0.23' classpath 'org.freemarker:freemarker:2.3.31' classpath 'org.postgresql:postgresql:42.2.19' classpath 'com.alibaba:druid:1.2.8' classpath fileTree(dir: "${rootDir}/libs", include: ['cn-plugins-generator-1.0.8.jar']) // libs为jar包代码插件存放位置,位置可以随意放,只要配置好路径即可 } } /** * 生成代码task */ task generateCode(type: cn.plugins.generator.task.GenerateCodeTask) { doFirst { dbType = "mysql" // 目前只支持mysql(5.7+)、meriaDB(对应mysql5.7+的版本)、postgresql(某个版本以上,具体版本后面会补齐说明) url = "localhost" // 数据库所在host port = "3306" // 数据库端口 database = "test" // 数据库名称 userName = "root" // 数据库用户名 password = "admin123456" // 数据库密码 frameworkType = "mybatisplus" // mybatis 或 mybatisplus tablePrefix = "base" // 切记不要带前缀下划线进来,如:btplatform_ tableName = "base_user" // 多个表使用英文逗号隔开,不要留空格符 projectPath = "/Users/admin/Desktop/project" // 此路径可以根据需求随意设置即可,只不过 projectDir.path 会定位到当前项目下 packageName = "com.test.admin" // 顶层包 controller = "controller" // 控制器对应的包名称 service = "service" // 业务逻辑层service对应的包名称 mapper = "mapper" // mybatis mapper对应的包名称 entity = "entity" // 与数据库表字段一一对应的实体包名称 xml = "mapper" // resources下mybatis xml所存放的位置 languageType = "java"// java或kotlin,当frameworkType为mybatisplus时,不支持生成kotlin代码,估计以后会考虑支持 author = "jy"//System.getProperty("user.name") // 生成的代码的顶部注释会的作者名称(默认拉取当前系统登录用户名) apiPrefix = "/api"// 定义的controller请求前缀,默认值:/api enableGenerateDoc = true // 是否生成支持swaggerUI2文档,当然前提是已经配置swaggerUI2,不然无法生效,UI可选择swaggerUI2/swagger-bootstrap-ui/knife4j enableGenVuePage = true // 是否生成vue crud页面代码,默认值:false } } /** * 生成数据库设计文档(markdown) */ task generateDoc(type: cn.plugins.generator.task.GenerateMarkdownTask) { doFirst { dbType = "mysql" url = "localhost" // 数据库所在host port = "3306" // 数据库端口 database = "base" // 数据库名称 userName = "root" // 数据库用户名 password = "admin123456" // 数据库密码 projectPath = "/Users/admin/Desktop/project" // 此路径可以根据需求随意设置即可,只不过 projectDir.path 会定位到当前项目下 } } ``` 2. 在工程项目中的build.gradle引用generate-code.gradle > 在最外层引用即可,不要把下面的脚本随意放到别的位置!!! ```groovy apply from: 'generate-code.gradle' ``` 想在springboot2.+的kotlin中怎么使用?目前spring官方默认给出的是使用kotlin编写DSL,不熟悉的人,就比较费劲了,文件也不再是以.gradle结束,而是.gradle.kts。 如下的脚本为kotlin编写DSL的使用方式,具体使用方式如下: 1. 在工程目录下创建一个独立的叫generate-code.gradle.kts的文件,文件脚本内容如下: ```kotlin import cn.plugins.generator.task.GenerateCodeTask import cn.plugins.generator.task.GenerateMarkdownTask buildscript { repositories { mavenLocal() maven { setUrl("https://maven.aliyun.com/repository/public/") } } dependencies { classpath 'mysql:mysql-connector-java:8.0.23' classpath 'org.freemarker:freemarker:2.3.31' classpath 'org.postgresql:postgresql:42.2.19' classpath 'com.alibaba:druid:1.2.8' classpath fileTree(dir: "${rootDir}/libs", include: ['cn-plugins-generator-1.0.8.jar']) // libs为jar包代码插件存放位置,位置可以随意放,只要配置好路径即可 } } 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文档 } /** * 生成代码task */ tasks.register(name = "generateCode") { doFirst { dbType = "mysql" // 目前只支持mysql(5.7+)、meriaDB(对应mysql5.7+的版本)、postgresql(某个版本以上,具体版本后面会补齐说明) url = "localhost" // 数据库所在host port = "3306" // 数据库端口 database = "test" // 数据库名称 userName = "root" // 数据库用户名 password = "admin123456" // 数据库密码 frameworkType = "mybatisplus" // mybatis 或 mybatisplus tablePrefix = "base" // 切记不要带前缀下划线进来,如:btplatform_ tableName = "base_user" // 多个表使用英文逗号隔开,不要留空格符 projectPath = "/Users/admin/Desktop/project" // 此路径可以根据需求随意设置即可,只不过 projectDir.path 会定位到当前项目下 packageName = "com.test.admin" // 顶层包 controller = "controller" // 控制器对应的包名称 service = "service" // 业务逻辑层service对应的包名称 mapper = "mapper" // mybatis mapper对应的包名称 entity = "entity" // 与数据库表字段一一对应的实体包名称 xml = "mapper" // resources下mybatis xml所存放的位置 languageType = "java"// java或kotlin,当frameworkType为mybatisplus时,不支持生成kotlin代码,估计以后会考虑支持 author = "jy"//System.getProperty("user.name") // 生成的代码的顶部注释会的作者名称(默认拉取当前系统登录用户名) apiPrefix = "/api"// 定义的controller请求前缀,默认值:/api enableGenerateDoc = true // 是否生成支持swaggerUI2文档,当然前提是已经配置swaggerUI2,不然无法生效,UI可选择swaggerUI2/swagger-bootstrap-ui/knife4j enableGenVuePage = true // 是否生成vue crud页面代码,默认值:false } } /** * 生成数据库设计文档(markdown) */ tasks.register(name = "generateDoc") { doFirst { dbType = "mysql" url = "localhost" // 数据库所在host port = "3306" // 数据库端口 database = "base" // 数据库名称 userName = "root" // 数据库用户名 password = "admin123456" // 数据库密码 projectPath = "/Users/admin/Desktop/project" // 此路径可以根据需求随意设置即可,只不过 projectDir.path 会定位到当前项目下 } } ``` 2. 然后在build.gradle.kts文件中引用该gradle脚本: ```kotlin apply(from = "generate-code.gradle.kts") // 特殊就在这个地方,这是kotlin编写DSL的脚本,与groovy还是有区别的 groovy的为:apply from: 'generate.gradle' ``` #### 生成代码或数据库设计markdown文档截图 1. 生成代码只需运行上述的task即可 ![image](/screenshot/generate_gradle.png) #### 生成代码截图如下 2. 生成的kotlin代码 ![image](/screenshot/kotlin.png) 3. 生成的java代码 ![image](/screenshot/java.png) 4. 生成的mapper xml代码 ![image](/screenshot/mybatis.png) 5. 生成markdown文档 ![image](/screenshot/markdown.png) #### 参与贡献 1. Fork 本仓库 2. 新建 分支 3. 提交代码 4. 新建 Pull Request