GO项目自动化-根据库表字段自动生成API

根据库表字段自动生成API

一个项目开发离不开数据库的增删改查,API功能也基本围绕着表的CRUD:增加(Create)、读取(Read)、更新(Update)和删除(Delete)。每个表写一个CRUD,方法都差不多,逻辑也非常相似。
那么有没有可能根据表结构直接自动化生成各个表的CRUD呢?
当然可以,前几篇文章已经介绍了golang的API项目搭建和数据库操作,那么本篇直接一个飞跃成长,项目自动化生成。
生成代码尽量简洁,方便根据项目实际需求二次开发。

API规则

首先建立好规则,方便生成逻辑统一的CRUD:

1.数据库表结构规则

  1. id为int类型自增数值
  2. 都有创建、更新时间,字段名固定为created_at,updated_at,且为int64类型,存值为时间戳
  3. 都有状态字段,字段名固定为status,int类型,初始值为0,删除为-1

2.CRUD规则

  1. Create时,除了id、status,created_at,updated_at,其他字段都作为入参,入库时初始status为0,创建、更新时间为当前时间戳
  2. Read时,带分页功能,分页参数统一为:limit(每页条数)、offset(第几页,从1开始),响应所有表字段原始数据
  3. Update时,必传id参数,除status,created_at,updated_at外的其他字段都可更改,更新时间自动设置为当前时间戳
  4. Delete时,必传id参数,status设置为-1,更新时间自动设置为当前时间戳

cli使用

  1. 下载cli源码
    https://github.com/liyonge-cm/go-api-cli

编译可执行文件

go build
  1. 按规则创建库表

  2. 修改配置文件
    修改config/config.yml的配置信息

mysql: mysql连接配置frame:out_path: 项目文件所在位置prj_name: 项目名称json_case: api入参处参的json格式:camel-驼峰,默认下划线api:tables: - user 指定生成API的表
  1. 创建项目
    执行编辑文件创建项目
go-cli -g frame

或直接运行main文件

go run main.go -g frame
  1. 生成API
    执行编辑文件生成API
go-cli -g api

或直接运行main文件

go run main.go -g api

启动生成的新项目

  1. 进入项目文件: cd xxx/prj-aiee-api(配置文件中的项目地址)
  2. 下载依赖包: go mod tidy
  3. 修改配置config,数据库连接地址等
  4. 启动: go run main.go
    就可以调用API就行增删改查了

api 风格

  1. API method统一为post,body以json入参。如
curl -X POST "http://localhost:8080/user/getList" -H  "accept: application/json" -d "{\"limit\": 10,\"offset\": 1}" 
  1. API路由以表名作为group,crud分别为create,get,getList,update,delete。
    如有一个表名为user,生成API请求地址分别为:
  • http://localhost:8080/user/create
  • http://localhost:8080/user/get
  • http://localhost:8080/user/getList
  • http://localhost:8080/user/update
  • http://localhost:8080/user/delete

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++力扣题目111--二叉树的最小深度

力扣题目链接(opens new window) 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2 思路 看完了这篇104.二…

Java入门IDEA基础语法

1:Java入门 1.1 Java简介 Java是什么: Java是一门非常优秀的计算机语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java之父:詹姆斯高斯林(James Gosli…

履践致远 载誉前行 | 甄知科技获评多项荣誉资质认定!

砥砺深耕 履践致远 甄知科技不断精进 持续成长 获评多项荣誉资质认定 23年4月 甄知成功入库科技型中小企业名单 2023年4月,上海市科技技术委员会公布2023年第二批入库科技型中小企业名单,依据《科技型中小企业评价办法》等要求,经各级评价工…

《尚贤达猎头网站流量统计模块》,通过HTTP自定义模块实时获取asp.net网站访问流量,并保存到数据库

开发了个网站流量统计模块,实时获取asp.net网站访问流量,并保存到数据库。 一、功能: 通过HTTP自定义模块实时获取网站流量 二、支持平台:windowsIIS 三、安装方法: 1、将文件www.sunsharer.cn.dll复制到网站bin目录下…

汽车出海业务专业术语

引言 本文是笔者在做中国汽车出口欧洲业务的信息化建设过程,积累的一些专业术语注解,供诸位参考交流。 专业术语清单 报关   报关是指出口货物的所有者或其代理人,根据中国海关法和相关法规,向海关申报货物的出口情况,并提交相关单证,以便海关对货物进行监管和征税。…

什么是算法的时间复杂度?

一、问题 算法的时间复杂度是评测算法好坏的主要指标,那么什么是算法的时间复杂度呢? 二、解答 算法的时间复杂度度量主要是计算⼀个算法所⽤的时间,算法所⽤的时间主要包括程序编译时间和运⾏时间。由于⼀个算法⼀旦编译成功就可以多次运⾏…

孩子用什么样的灯对眼睛没有伤害?分享最合适孩子的护眼台灯

为人父母以后,孩子健康成长一定是摆放在首位的,随着孩子慢慢长大,步入更高的年级,作业课程也在随之增多。不少孩子哪怕夜色已经降临,仍就伏案在桌子上完成没有做完的功课,作为父母的我们不得不担心孩子的视…

记录一下Canal的错误,主要是top.javatool.canal.client.util下的StringConvertUtil引起的

项目场景: 提示:这里简述项目相关背景: 由于数据库的一个localdatetime字段是空的, 然后修改数据库数据同步canal的时候报了这个错误: Caused by: java.lang.IllegalArgumentException: Can not set java.time.LocalD…

浏览器输入一个域名的解析过程

目录 从输入一个域名的解析过程 以www.baidu.com为例子 本地缓存和hosts文件 mDNS和LLMNR NBT-NS 路由器广播 Root域名服务器 顶级域名服务器 目标域名服务器 DNS解析完成 操作系统发起TCP连接: TCP三次握手: TCP连接的建立采用经典的三次握手过程&#…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷③

单元测试 一、任务要求 题目1:输入一个大写字母一个小写字母。根据输入的第一个字母和英文周几单词的第一个大写字母判断是周几,如果无法根据第一个大写字母判断,则继续根据输入的第二个小写字母进行判断,最终返回正确的英文周几…

第88讲:XtraBackup实现增量数据备份以及故障恢复的应用实践

文章目录 1.XtraBackup增量备份恢复的概念2.XBK增量备份语法3.使用XBK实现数据库的增量备份3.1.周日全量备份数据库3.2.周一产生增量数据并进行增量备份3.3.周二产生增量数据并进行增量备份3.4.查看两次增量以及全量的备份文件3.5.核对全量和增量备份的准确性 4.使用XBK通过增量…

Python的运算符和数据类型转换

Python的运算符&#xff1a; 算术运算符: 加法&#xff1a;减法&#xff1a;-乘法&#xff1a;*除法&#xff1a;/取余&#xff1a;%幂运算&#xff1a;**整除&#xff1a;// 比较运算符: 等于&#xff1a;不等于&#xff1a;!大于&#xff1a;>小于&#xff1a;<大于等于…

WPF真入门教程27--项目案例--设备数据实时监测

1、上图看效果 今天要做的一个案例是这样的效果&#xff0c;它能实时监测车间设备有关数据&#xff0c;并以表格和图形显示在界面上&#xff0c;这个比上个案例要复杂些&#xff0c;颜值也高些&#xff0c;通过这个来巩固wpf的技能&#xff0c;用到了命令绑定&#xff0c;样式…

【数据库】视图索引执行计划多表查询笔试题

文章目录 一、视图1.1 概念1.2 视图与数据表的区别1.3 优点1.4 语法1.5 实例 二、索引2.1 什么是索引2.2.为什么要使用索引2.3 优缺点2.4 何时不使用索引2.5 索引何时失效2.6 索引分类2.6.1.普通索引2.6.2.唯一索引2.6.3.主键索引2.6.4.组合索引2.6.5.全文索引 三、执行计划3.1…

uniapp运行自定义底座到真机没反应

同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 如果此时手机没有任何反应&#xff0c;请检查自定义基座是否正确;如果是离线制作的自定义基座包&#xff0c; 请检查离线包制作是否正确。 网上各种查找报…

C++力扣题目513找树左下角的值

给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 思路 本题要找出树的最后一行的最左边的值。此时大家应该想…

C#Stopwatch类高精度计时功能

Stopwatch 是 C# 中的一个类&#xff0c;用于测量时间间隔的工具。它提供了高精度的计时功能&#xff0c;可以用于性能测试、调试和其他需要测量时间的场景。 使用 Stopwatch 类&#xff0c;你可以执行以下操作&#xff1a; 启动计时器&#xff1a;使用 Start 方法启动计时器…

Verilog 状态机 示例

状态机设计&#xff1a;3 段式&#xff08;推荐&#xff09; 状态机设计如下&#xff1a; (0) 首先&#xff0c;根据状态机的个数确定状态机编码。利用编码给状态寄存器赋值&#xff0c;代码可读性更好。 (1) 状态机第一段&#xff0c;时序逻辑&#xff0c;非阻塞赋值&#xf…

okcc呼叫系统如何配置呼入?

配置OKCC的呼入需要进行以下步骤&#xff1a; 1. 登录OKCC管理界面&#xff1a;使用管理员账号和密码登录OKCC的管理界面。通常可以在浏览器中输入OKCC的IP地址或域名来访问管理界面。 2. 确认网关配置&#xff1a;在OKCC管理界面中&#xff0c;确认已正确配置了网关&#xf…

在windows11系统上利用docker搭建linux记录

我的windows11系统上&#xff0c;之前已经安装好了window版本的docker&#xff0c;没有安装的小伙伴需要去安装一下。 下面直接记录安装linux的步骤&#xff1a; 一、创建linux容器 1、拉取镜像 docker pull ubuntu 2、查看镜像 docker images 3、创建容器 docker run --…