ZeusAutoCode代码生成工具(开源)
ZeusAutoCode代码生成工具
一、简介
Zeus代码生成器是一款自动代码生成工具,旨在快速生成基础的CRUD代码,在此基础上也提供了一些高级功能,做到灵活配置,生成可扩展性强的代码。
后端是基于springboot、freemarker、mybatisplus实现
前端采用vue3、elementplus、electron技术
ZEUS官网
客户端在线下载
后端Gitee 仓库地址 | 前端Gitee 仓库地址
后端GitHub 仓库地址 | 前端GitHub 仓库地址
优势
1. 项目结构可视化,文件树、文件图形化的模板编辑,操作模板更加直观、简洁。
2. 使用Freemarker作为模板引擎,模板中支持Freemarker所有语法,系统提供强大的内置字典。模板操作更加灵活。
3. Zeus可以作为作为mysql、oracle客户端,直接连接内网数据库。
4. 脚本管理。取代Jenkins,轻量化快速更新打包项目。网页查看项目日志等功能。
5. 方便团队开发项目,统一代码风格,规范化代码接口。
客户端支持多开。同一个电脑可以打开多个客户端。可以分别登录管理员和普通用户的账号,管理员修改模板内容。普通用户生成代码。
二、快速使用
-
下载客户端
客户端在线下载
-
客户端默认有两个用户
管理员 admin/admin 普通用户 test/123456
登录管理员账号,在项目管理处,可以查看 项目,进入项目管理查看目前已有的模板。
代码生成就是根据这些模板动态根据数据库反向生成代码 -
新建配置
登录普通用户账号在配置管理处新建一条配置信息 具体查看6.2 普通用户新建配置
-
生成代码
在取码中心 选择配置、选择表 生成代码 具体查看6.3 普通用户生成代码
-
大功告成
打开配置管理 我们配置的文件路径,会看到生成的代码
三、角色说明
管理员
团队技术leader,负责创建项目、组建项目人员、创建模板、管理用户、版本更新、脚本管理(更新打包)。
普通用户
普通开发人员,(前端后端都可以)通过配置中心配置项目路径和数据库地址。在取码中心快速生成代码、注入项目中
四、快捷键说明
快捷键只在客户端有效
1. 切换后台接口
快捷键CTRL I
zeus代码生成器客户端可以动态切换请求的后台接口地址
2. 打开控制台
快捷键CTRL ALT I
zeus代码生成器客户端,可打开浏览器控制台,查看接口信息
五、功能说明
1. 项目管理(管理员)
- 项目在zeus中是一个基础单元。他可以是前端项目,也可以是后端项目。
- 代码生成是基于项目来的,项目除了有本身的名称、描述、公开等属性外。还具有高级功能【数据字典】(更灵活的生成模板)。
- 如果项目不是公开项目,就可以组建自己的开发团队,加入开发人员,只有开发人员才能看到对应的项目。
- 项目中还包括了空间树和模板。空间树是项目的目录结构,有文件和文件夹两种形式。
- 文件对应的就是模板,根据模板里的代码生成对应的代码。
1. 项目说明
项目是由管理员定义,可以是前端项目、后端项目等任意形式,他具有项目名称、项目描述、是否公开、创建属性的属性。如果是非公开项目,可以给项目组建人员团队,指定人员能看到此项目。
2. 数据字典
数据字典是模板的高级配置。分为内置字典和自定义字典两种
1. 内置字典
内置字典是系统中自带的字典,在模板中用户可以直接使用字典值获取对应的数据。
内置字典的数据来源是,普通用户在配置中心配置的数据库连接,然后在取码中心选择的表。(表名、描述、字段列表)
用户通过在模板中使用内置字典可以完成基本单表CRUD操作
一级字典 | 二级字典 | 字典释义 | 示例 |
---|---|---|---|
${table_name} | 空 | 表名字 | model_user |
${tableDesc} | 空 | 表描述 | 用户表 |
${TableName} | 空 | 表名字首字母大写驼峰 | ModelUser |
${tableName} | 空 | 表名字首字母小写驼峰 | modelUser |
${FiledList} | filed_name | 字段名字 | user_name |
${FiledList} | filedDesc | 字段描述 | 用户名称 |
${FiledList} | FILEDNAME | 字段名字首字母大写驼峰 | UserName |
${FiledList} | filedName | 字段名字首字母小写驼峰 | userName |
${FiledList} | isKey | 是否主键 | Y/N |
${FiledList} | nullable | 是否非空 | Y/N |
${FiledList} | filedLen | 字段长度(数字) | 20 |
${FiledList} | scale | 精度(数字) | 2 |
${FiledList} | defaultValue | 默认值 | |
${FiledList} | realType | 真实字段类型 | varchar |
${FiledList} | javaType | 字段类型转JAVA类型 | String |
${FiledList} | xmlType | 字段类型转XML类型 | VARCHAR |
内置字典转化规则
字段类型转XML类型规则 | 字段类型转JAVA类型规则 |
---|---|
varchar ==> VARCHAR | varchar ==> String |
char ==> VARCHAR | double ==> Double |
text ==> LONGVARCHAR | char ==> String |
tinyint ==> TINYINT | text ==> String |
bigint ==> BIGINT | int ==> Integer |
int ==> INTEGER | tinyint ==> Integer |
numeric ==> DOUBLE | bigint ==> Long |
decimal ==> FLOAT | numeric ==> Double |
date ==> DATE | decimal ==> Float |
datetime ==> TIMESTAMP | date ==> Date |
datetime ==> TIMESTAMP |
2. 自定义字典
自定义字典分为三类 字符串、数组、属性列表。
管理员可以在项目中定义该项目的内置字典。在模板中使用内置字典。类似于声明一个插槽。用户在生成代码的时候可以去灵活给插槽赋值。动态生成自己想要的代码。
分类 | 功能 |
---|---|
字符串 | 声明字符串类型的自定义字典,主要用来给模板中传如固定字符串。比如包名 |
数组 | 声明数组型字典,常见的主要用来控制后台的增删改查功能,或者前台的,按钮显示,增删改查功能 |
属性列表 | 属性列表是对内置字典中的FiledList的筛选。可以用来做前端查询条件、列表数据、编辑数据动态化 |
3. 空间树
空间树是项目的目录结构,空间树,有文件和文件夹组成,文件是Freemarker模板。
用户通过构建自己项目空间树,动态生成具有此目录结构的代码到项目中来。
空间树的根节点就是项目的根目录。对应普通用户【配置中心】后台项目项目目录中的配置。
1. 新建空间树
-
选中项目根节点,右键,即可新建文件或者文件夹。
-
然后,点击文件夹》右键》可以修改该文件夹,也可以新增该文件夹下的文件夹和文件
-
点击文件,在右侧填充对应的模板信息
-
填充好模板后,点击右上角提交代码按钮。即可保存模板
空间树目录要和实际项目目录保持一致
2. 空间树示例
2. 用户管理(管理员)
管理员可以通过用户管理功能创建系统用户
3. 版本更新(管理员)
管理员可以通过版本更新实现客户端的快速更新迭代
版本更新分为线上更新和线下更新两种模式。
实现方式:
通过判断当前版本的版本号(数据库存储)和客户端的版本号(package.json的version属性)是否一致,如果不一致,就拉取最新的版本,下载到本地。重启客户端,完成客户端升级
1. 线下更新
1. 修改前端代码中的package.json中的version属性。
2. 前端代码打包 yarn run package:prod
3. 通过对前端代码进行打包,找到D:\workspace\workspace-zeus\zeus-view\dist_electron\win-ia32-unpacked\resources\app.asar文件。对此文件进行压缩,压缩成zip包,
4. 在【版本更新】处新建一个版本,版本号和version的版本号一致。上传刚才压缩的zip包
5. 重启客户端,自动拉去最新版本,完成更新
2. 线上更新
1. 修改前端代码中的package.json中的version属性。
2. 提交代码到git上
3. 执行【脚本管理】的 ‘生成器前端打包’脚本
4. 在【版本更新】处新建一个版本,版本号和version的版本号一致。选择线上。url固定填 http://39.101.173.227/zeus/app.zip
5. 重启客户端,自动拉去最新版本,完成更新
3. 前端更新脚本示例
脚本文件 viewcode.sh
#!/bin/bash
#auth eric
#date 2021-07-14
#*********脚本入参#*********
appname=code
#Git源码位置
gitsrc=/home/egn/GitSpace/zeus-view
#Nginx位置
nginxsrc=/usr/local/nginx/html/zeus/
#*********脚本入参#*********
cd $gitsrc && git pull origin master && yarn run build:prod
mv -f $gitsrc/dist_electron/win-unpacked/resources/app.asar $nginxsrc
rm -rf $nginxsrc/*.zip
echo '删除历史包'
cd $nginxsrc
zip app.zip app.asar
echo '发布成功'
参考这个脚本,也可以做其他前端项目的自动打包
4. 后台更新脚本示例
脚本文件 code.sh
#!/bin/bash
#auth eric
#date 2021-07-14
#*********脚本入参#*********
appname=code
#Git源码位置
gitsrc=/home/egn/GitSpace/zeus-server
#Docker脚本位置
dockersrc=/home/egn/DockerBuilder/$appname
#*********脚本入参#*********
cd $gitsrc && git pull origin master && mvn install -DskipTests
if [ $? -eq 0 ];
thenecho "maven build success "
else echo -e '\033[31m[ error ] gradle build faild \033[0m' && exit 1
fi
\cp -f $gitsrc/target/*.jar $dockersrc
echo '第二步:查看是否有镜像'
cd $dockersrc
imageresult=$(docker images |grep $appname | wc -l)
if [ $imageresult -eq 0 ];
thenecho "不存在镜像,需要重新初始化鏡像";docker build -t $appname .docker run -d --name $appname -p 8003:8003 --restart always $appname
elseconid=$(docker ps |grep $appname |awk '{print $1}')docker cp *.jar $conid:/$appname.jardocker restart $conidif [ $? -eq 0 ]; thenecho "发布成功!"else echo -e '\033[31m[ error ] 发布失败 \033[0m' && exit 1fi
fi
参考此脚本,同理可以做后台项目自动打包部署
5. 前后端脚本基础环境搭建
https://blog.csdn.net/qq_35921773/article/details/121694667
4. 脚本管理(管理员)
脚本管理核心是远程连接linux服务器,执行linux命令
用户可以通过该功能实现项目的远程打包、查看日志、服务重启……等操作
5. 网页库(管理员)
网页库是让用户快捷跳转项目常用网址的一个功能。管理员可以通过网页库新建该项目的所有网址,例如Gitlab、禅道、测试环境地址、原型地址……
6. 配置中心(普通用户)
普通用户在配置中心可以根据自己已有的项目,新建该项目的配置信息。
配置信息主要包含:选择项目、项目目录、配置名称、配置描述、数据库连接信息这些属性
用户可见的项目: 公开项目和私有项目用户在项目成员中
数据库连接信息: 客户端作为数据库连接工具,就像是Navicat一样获取当前数据的所有表。可以连接内网数据库
项目目录:生成的代码注入的目录。一般为项目根目录
7. 取码中心(普通用户)
注意:
使用zeus客户端生成代码会强制覆盖本地代码。所以在生成代码前,可以先通过配置详情功能选择要生成的文件
1. 操作步骤
- 选择用户在配置中心新建的配置数据
- 选择配置数据库加载而来的数据表
- 打开【配置详情】页面。可以动态勾选要生成的模板,以及动态填充自定义字典内容。
- 点击生成按钮,代码自动注入到 配置中心的用户自建的配置目录中
2. 高级配置
(前端待完善)
配置详情页面
数组类型字典,复选框勾选
属性列表型字典,表格复选框勾选
8. 网页库(普通用户)
用户通过管理员分配的网页库可见权限,点击网页直接打开浏览器跳转到对应的网址
六、使用手册
Tips: 客户端可以多开,可以同时打开两个客户端,一个登录管理员,一个登录普通用户。管理员实时编辑模板,普通用户实时生成代码。
1. 管理员新建项目
管理员可以通过新增按钮创建项目,也可以直接通过复制操作,完全拷贝一个项目
在项目中构建自己的空间树、和模板。详情参考功能说明中的空间树介绍
2. 普通用户新建配置
普通用户在【配置管理】菜单中,新建配置
- 选择项目
- 设置项目所在的本地目录
- 填写数据库连接信息
- 测试数据库连接
- 保存配置
3. 普通用户生成代码
- 用户打开【取码中心】功能
- 选择我们在配置中心新建的配置
- 选择根据配置信息加载的表
- 点击生成代码
4. 高级配置
5. 模板语法
主要参考已有模板,Freemarker的所有语法都支持。
这里列举下常见语法
-
遍历数组
<#list FiledList as field>private ${field.javaType} ${field.filedName}; </#list>
-
字符串转数组
<#assign function_list=FunctionList?split(",") > <#list function_list as function><#if (function == 'findPage')></#if> </#list>
-
遍历数组获取下标
<#list FiledList as column><#if (column_index>0)><#if (column.javaType== 'String')>if(StringUtils.isNotEmpty(body.getParameter().get${FiledList[0].FILEDNAME}())) queryWrapper.like("${column.filed_name}", body.getParameter().get${FiledList[0].FILEDNAME}());</#if><#if (column.javaType== 'Integer' || column.javaType== 'Double' || column.javaType== 'Float' || column.javaType== 'Long')>if(body.getParameter().get${FiledList[0].FILEDNAME}() != null) queryWrapper.eq("${column.filed_name}", body.getParameter().get${FiledList[0].FILEDNAME}());</#if></#if> </#list>
七、常见问题
1. 取码中心生成代码失败
通过管理员登录系统,进入脚本管理,运行查看代码生成器日志脚本,查看模板报错信息。
2. 取码中心生成无反应
-
zeus客户端软件权限
1. 桌面选择zeus客户端的logo 2. 右键》属性》打开文件所在位置》找到zeus.exe 以管理员权限运行 3. 桌面zeus快捷方式,右键》属性》高级》勾选 以管理员身份运行
-
切换【配置中心】代码。后台项目目录
尽量不要选C盘的,C盘权限不足会导致代码无法注入。
-
查看日志排查问题
接口问题排查
在客户端使用快捷键CTRL ALT I 可以打开控制台,查看生成代码接口,是否返回正常,如果是接口错误,大概率是模板错误
客户端问题排查
1. 桌面选择zeus客户端的logo 2. 右键》属性》打开文件所在位置 3. 复制当前路径 4. 使用管理员方式打开CMD,输入刚才输入的路径cd进去 5. 执行zeus.exe 6. 查看客户端日志
相关文章:

ZeusAutoCode代码生成工具(开源)
ZeusAutoCode代码生成工具 一、简介 Zeus代码生成器是一款自动代码生成工具,旨在快速生成基础的CRUD代码,在此基础上也提供了一些高级功能,做到灵活配置,生成可扩展性强的代码。 后端是基于springboot、freemarker、mybatisplu…...

算法题记录
力扣的算法题:1154 给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1: 输入:date “2019-01-09” 输出:9 解释:给定日期是2019年的第九天。 示例…...

章节2 行走数据江湖,只需一行代码
目录6. 函数填充,计算列6.1 excel操作6.2 pandas操作16.3 pandas操作28. 数据筛选、过滤,[绘图前的必备功课]8.1 excel操作8.2 Python操作http://sa.mentorx.net 蔓藤教育6. 函数填充,计算列 书的编号、书的名字、标价、折扣、最终价钱 最终…...

springboot集成xx-job;
概念理解: xx-job是一个分布式任务调度平台。比如你有AB两个项目。 AB的定时任务就要在xx-job上个注册。同时AB要配置对应的依赖。 所以集成xx-job要分2步骤:第一步:先搭建xx-job服务 第二步,在A项目中导包并引用。 第一步&am…...

35岁,失业6个月终于接到降薪offer:有面就面,薪酬不限,随机应变说瞎话,对奇葩面试官保持礼貌克制,为拿offer什么都能忍...
被裁后为了生存,人需要做出什么改变?一位35岁网友在失业6个月后终于拿到offer,虽然降薪到四年前的水平,但能继续养家糊口,楼主已经很满意了,并分享了自己的个人经验:1.挖掘历史项目经验…...

如何有效管理项目进度 都有哪些解决方法
项目进度管理是确保项目按时完成的关键因素之一。如果一个项目不能按时完成,那么它可能会导致成本超支、客户不满意和失去信誉等问题。因此,有效的项目进度管理至关重要。在本文中,我们将探讨如何有效管理项目进度以及可以采取哪些解决方法。…...
互联网随想(三) 光纤与电路交换
光纤的 “纤”,读 xian(先),第一声,而不是 qian(千)。 光纤之于通信,就像半导体之于计算机。光纤突破了通信的电子瓶颈,就像半导体集成电路突破了计算机的电子管瓶颈一样。 但本文不是赞美光纤的,本文为反…...

electron之旅(二)react使用
首先使用react模板 我们这里使用的是vite和yarn yarn create vite #创建vite的react-js模板初始化依赖 yarn添加依赖 state(状态管理) yarn add redux react-reduxroutes(react路由) yarn add react-router-domelectron依赖 yarn add electron vite-plugin-electron cross-env…...
ChatGPT基础知识系列之Prompt
ChatGPT基础知识系列之Prompt 在 ChatGPT 中,用户可以输入任何问题或者话题,如天气、体育、新闻等等。系统将这个输入作为一个“提示”(prompt)输入到 GPT 模型中进行处理。GPT 模型会基于其学习到的语言规律和上下文知识,生成一个自然语言回答,并返回给用户。 例如,当…...

SpringBoot3 - Spring Security 6.0 Migration
Spring Security 6.0 Migration https://docs.spring.io/spring-security/reference/5.8/migration/servlet/config.html 最近在做SpringBoot2.x到3.0的升级。其中最主要的一部分是javax -> jakartapackageName的变更,另外一部分是对一些废弃/删除的类进行替换。…...

【新2023Q2模拟题JAVA】华为OD机试 - 最少停车数
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:最少停车数 题目 特定大小的…...
《代码实例前端Vue》Security查询用户列表,用户新增
login.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>系统登录-超市订单管理系统</title><link rel"stylesheet" href"../css/style.css"><script type&qu…...
CANopenNode学习笔记(一)--- README翻译
CANopenNode学习笔记 文章目录CANopenNode学习笔记特性CANopen其他CANopenNode 流程图文件结构对象字典编辑器CANopenNode 是免费开源的CANopen协议栈。 CANopen是建立在CAN基础上的用于嵌入式控制系统的国际标准化(EN 50325-4) (CiA301)高层协议。有关CANopen的更多信息&#…...

关于Android 11、12和13服务保活问题
物联网环境,为了解决不同厂商、不同设备、不同网络情况下使用顺畅,同时也考虑到节约成本,缩小应用体积的好处,我们需要一个服务应用一直存在系统中,保活它以提供服务给其他客户端调用。 开机自启动,通过广播…...

Java 泛型 使用案例
参考资料 Java 基础 - 泛型机制详解路人甲-Java泛型专题 目录一. 通用Mapper1.1 实体类1.2 Mapper基类1.3 自定义接口1.4 抽象基类Service1.5 调用二. session和bean的获取一. 通用Mapper 1.1 实体类 ⏹ Accessors(chain true): 允许链式调用 import lombok.Data; import …...

进程与线程
文章目录什么是线程线程与进程的关系线程与进程的区别什么是线程 上一篇文章中我们介绍了什么进程,我们把进程比作一个工厂,那么线程就是工厂中的流水线。引入进程的目的就是为了实现多个任务并发执行,但是如果频繁的创建销毁进程࿰…...

骑友,怎么挑选适合自己的赛事
骑友,怎么挑选适合自己的赛事一、从场地、路况、天气,各个方面了解赛事的要求。二、看完赛事,要知道自己适合参加什么样的比赛。三、通过比赛成绩,对比自己的实力。四、综合考虑自己的经济能力,根据自己的经济能力选择…...

【Java 数据结构与算法】-遍历Map和Set的方式
作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Java 数据结构与算法】 文章目录一、遍历Map法一 先获取Map集合的全部key的set集合,遍历map的key的Set集合法二 把map的key和value打包成Set的key后的这个Set集合法…...

组件、套件、 中间件、插件
组件、套件、 中间件、插件 组件 位于框架最底层,是由重复的代码提取出来合并而成。组件的本质,是一件产品,独立性很强,组件的核心,是复用,与其它功能又有强依赖关系。 模块 在中台产品和非中台产品中&…...

自动化工具 pytest 内核测试平台落地初体验
测试平台,有人说它鸡肋,有人说它有用,有人说它轮子,众说纷纭,不如从自身出发,考虑是否要做测试平台: 第 1 阶段,用 Pythonrequests 写接口自动化。 第 2 阶段,选择 unit…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...