代码生成器 |
您所在的位置:网站首页 › 开发代码生成器 › 代码生成器 |
代码生成器前言 由于开发时,经常会同时兼顾多个项目,每个项目的代码风格,或者说框架结构不尽相同,导致需要给每个项目都编写其自己的代码生成模板,在经常切换项目开发时,启动关闭不同的代码生成器实在有些许繁琐。 Ballcat Codegen 提供了在线编辑代码生成模板的功能,只需在公司内部服务器中启动一个代码生成器服务,各项目组编写自己的代码模板,在生成代时,选用指定模板即可。 主体设计代码生成器中有以下几类主体:数据源(项目)、模板组、模板属性、模板文件 数据源(项目)一个数据源可以看成是一个项目,在生成不同项目的代码时,切换不同的数据源去获取表信息,支持实时在线的增添数据源,减少代码生成器的使用负担 模板组一个模板组对应着一种代码生成的规则,每个模板组都有自己的模板文件和模板属性。 ballcat 默认提供了自己的模板组,用户可以自己编写模板组,也可以基于现有的模板组进行复制再微调结构。 模板属性模板属性挂靠于一个模板组,是系统解析表和字段元数据后获取到的一些信息,也支持用户生成时自定义填写一些属性数据,以下是默认提供的一些属性信息: 系统属性 属性含义属性含义tableName当前表名comments当前表备注className类名,大驼峰形式,首字母大写tableAlias表别名,类名各单词首字母小写组合classname类名,小驼峰形式,首字母小写pk主键的列属性path类名,全字母小写,多个单词间使用 - 分隔columns列属性的集合pathName类名,全字母小写currentTime当前系统时间列属性 属性含义属性含义columnName列名comments列备注dataType列数据类型attrName列对应属性名,首字母小写attrType列对应Java类型capitalizedAttrName列对应属性名,首字母大写columnType列类型(数据类型+长度等信息)extra列的额外属性,如自增用户自定义属性 除了以上从表结构中解析出的属性,用户可以自定义一些属性,并在代码生成时进行填写 ballcat 的默认模板使用了三个自定义属性 属性含义属性含义author作者packageName包名moduleName模块名,纯字母模板文件每个模板文件都有其所属的模板组,这些文件分为两类,文件夹以及文件,有上下的层级关系。 一个模板组下的所有文件根据此层级构成一个目录树,这个目录树结构即是代码生成后的文件结构,做到所见即所得。 如下图就是 ballcat 提供的默认模板的目录树结构: 文件夹以及文件的路径/名称 模板文件名支持使用属性占位,使用 {} 包含属性名的方式,注意,文件夹名称属性值中的 . 将被替换为 / 如上图中选中的文件夹名为 {packageName}.{moduleName},假设生成代码时,packageName 属性值为 com.ballcat.demo 而 {moduleName} 属性值为 sys,则最终该模板文件夹实际将被生成为 4 层结构的文件夹 |-- com `-- ballcat `-- demo `-- sys模板文件内容则是使用 velocity 模板引擎编写的代码模板,在模板文件中使用属性时,需要使用 ${} 的形式进行占位。 例如现在有个属性 tableName,值为 tbl_table,只需在模板文件中如下编写: System.out.println("${tableName}");则实际生成后的文件如下所示 System.out.println("tbl_table");更多velocity语法参看 Velocity 官网教程open in new window 生成过程根据数据源获取到需要生成表数据信息,解析其结构并转化为模板属性。根据用户选择的模板组获取到对应的模板文件目录结构,并逐一解析目录项,文件名进行占位替换,文件内容进行模板引擎解析将文件打包进 zip,进行下载项目结构|-- ballcat-codegen |-- ballcat-codegen-backend ## 代码生成器后端源码 `-- ballcat-codegen-frontend ## 代码生成器前端源码项目使用前后端分离开发,但是启动部署时并不需要关心前端代码,maven 打包时会自动进行前端代码的构建,并将其打包入后端代码的 resource 文件夹下,只需启动后端即可正常使用代码生成器。 快速使用一、 数据库导入create database `ballcat_codegen` default character set utf8mb4 collate utf8mb4_general_ci;执行上述命令新建数据库后,执行 ballcat 项目根目录下的 doc 文件夹下 3ballcat_codegen.sql 文件中的所有 sql 语句即可。 二、 启动应用在 ballcat 项目根目录执行 mvn clean install 完毕后,修改 ballcat-codegen-backend 模块下的 application.yml 配置文件, 替换数据源的url,用户名以及密码 spring: datasource: url: jdbc:mysql://ballcat-mysql:3306/ballcat_codegen?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: '123456'开发环境下,直接启动 ballcat-codegen-backend 项目下的 GeneratorApplication。 浏览器访问代码生成器项目,默认访问地址 http://localhost:7777 三、基础信息配置3.1 数据源添加数据源配置 => 新建,填入数据源名称,用户名密码,以及连接地址即可。 数据源密码使用 jasypt 加密显示,密钥在配置文件中可以调整 3.2 模板配置1: 新建模板组 点击即可新建一个模板组,建议使用复制已有的模板组来减少操作 2:复制一个模板组,包括其模板文件和属性配置 ballcat 默认提供了一个模板组,用户可以复制该模板组后,对生成的代码的路径,名称以及内容做个性化定制 3.3 模板文件编辑模板文件编辑页分为两个部分,左侧是目录区域,右键可以进行创建文件或文件夹,以及重命名等操作。 右键点击新建文件后,将弹出一个模态框,需要在模态框中先填写一些基础信息,再继续编写文件内容 文件名: 生成出来的文件的名称 标题:此文件的一个备注,主要用于区分类型的,在代码生成时,会提供这些文件的标题,用户可以勾选以便只生成想要的文件 新建的文件,在标签列上会有一个 灰色的圆点提示,编辑完模板后,记得 Ctrl + S 保存。 双击目录树中的文件,可以新开一个文件标签,修改后也需要进行 Ctrl + S 保存才能生效。 选中文件编辑框时按 F11 可以进入或退出全屏 3.4 属性配置自定义一些属性,用于文件名或者文件内容中提取使用,方便自定义一些生成逻辑。 这些属性将在代码生成时,进行填写 四、代码生成4.1 选择项目对应的数据源,获得表信息4.2 勾选需要生成的表,再点击批量生成,或者直接点击生成按钮进行单表生成4.3 生成参数配置1)切换不同的模板组,指定生成的文件 2)这里现实的是该模板组中所有的文件标题,可以进行勾选排除掉不需要生成的文件 3)表前缀,可以为空,有值时,会将表名前缀和填写值进行匹配删除,如表名为 tbl_table,表前缀填写值为 tbl_,则生成的类名为 Table,否则将会是 TblTable 模板组中配置的自定义属性,用户在这填写此次生成对应的值,用于模板中的逻辑处理,或占位替换一切完毕,点击确认后将会生成并下载一个 zip 压缩文件 五、代码复制解压代码压缩包,并复制代码 复制对应服务端代码至你本地代码路径 复制对应前端代码至你本地代码路径 数据库执行权限菜单 Sql 修改项目路径默认的访问路径为项目根路径: http://{host}:{port}。 如果需要添加项目访问的访问前缀,则需要修改前后端的两个配置,例如希望添加前缀 abc,让访问路径变为 http://{host}:{port}/abc: 服务端 application.yml 中的 server.servlet.context-path 属性修改为 /abc前端 vite.config.ts 中的 base 属性修改为 /abc/重新 clean install 即可生效。项目部署合并部署项目默认在打包时,利用 maven 插件会将前端项目代码编译并复制到后端的 resources 文件夹下,变成一个前后端不分离的项目。 前端的请求 BASE_URL 默认为 /api, 服务端会接收到此路径开头的 request 后,会将地址 rewrite, 删除 /api 后,再转发回服务端。 所以只需要直接编译打包 jar包部署即可。 注意:如果没有先 build 前端直接打包会导致 IDEA 很卡,建议先 build 前端后,执行 maven clean package 只需简单的将前端发起的请求映射到后端即可,nginx 配置参考如下: location / { proxy_pass http://127.0.0.1:7777/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } 分离部署前端和服务端分别部署。 可参考 ballcat 管理后台的前端 nginx 配置, /api 的 rewrite 和转发交由 nginx 处理。 注意事项权限菜单sql并非直接可以执行,需要注意以下两点: 1. 修改变量目录ID和菜单ID的值。 Ballcat 不推荐使用自增id的方式为权限表, 推荐使用多位字符串进行,菜单、模块、按钮的区分,如 ID100102,前两位10标识模块序号,中间两位01标识该模块下的菜单序号,最后两位02标识,该菜单下的权限/按钮序号。 具体ID位数,根据业务情况自拟 2. 非Mysql数据源使用问题。 为了简便设置,默认使用的sql生成文件,使用了Mysql的语法,进行了变量设置,如果使用其他数据源,则需去除该部分,只执行基础生成部分的sql,同时也要记得修改sql中所有的变量部分(以@开头) 参考文档[1] https://cli.vuejs.org/zh/config/#publicpathopen in new window |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |