APIJSON使用和搭建
APIJSON使用和搭建
- APIJSON的介绍
- 这是什么
- 这有什么用
- 对我们的项目好处有哪些
- 功能流程图
- 项目的搭建
- 安装&使用
- 修改数据库链接
- 导入表
- 语法的使用
- 基本查询
- 关联查询
- 分组查询
- 最后总结
APIJSON的介绍
这是什么
APIJSON是一种专为API而生的 JSON网络传输协议 以及 基于这套协议实现的ORM库
这有什么用
为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
对我们的项目好处有哪些
通过自动化API,前端可以定制任何数据、任何结构!
大部分HTTP请求后端再也不用写接口了,更不用写文档了!
前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了
功能流程图
一般Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程
部署上这个项目后,流程变成了这样
使用这个项目作为后端的支持的话,是不需要对每个表写增删改查等接口的,只需在该项目连接的数据里进行表的创建,以及配置接口权限即可。无需进行过多的开发,哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目,现在需要些的接口就基本写好了,直接调用就行了,是不是挺爽的。
项目的搭建
安装&使用
- 配置开发环境 推荐使用:
JDK: 1.8
,Maven: 3.0+
,Mysql
- 下载Demo项目:
git clone https://gitee.com/APIJSON/APIJSON-Demo.git
修改数据库链接
如我的数据库信息是这样的
数据库参数 | 值 |
---|---|
地址 | localhost:3306 |
用户 | root |
密码 | root |
数据库 | system |
改为自己数据库对应的链接
DEFAULT_DATABASE = DATABASE_MYSQL; //TODO 默认数据库类型,改成你自己的。TiDB, MariaDB, OceanBase 这类兼容 MySQL 的可当做 MySQL 使用DEFAULT_SCHEMA = "security"; //TODO 默认模式名,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:@Overridepublic String getDBVersion() {if (isMySQL()) {return "5.7.23"; //"8.0.11"; //TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 //MYSQL 8 和 7 使用的 JDBC 配置不一样}if (isPostgreSQL()) {return "9.6.15"; //TODO 改成你自己的}if (isSQLServer()) {return "2016"; //TODO 改成你自己的}if (isOracle()) {return "18c"; //TODO 改成你自己的}if (isDb2()) {return "11.5"; //TODO 改成你自己的}return null;}@Overridepublic String getDBUri() {if (isMySQL()) {// 这个是 MySQL 8.0 及以上,要加 userSSL=false return "jdbc:mysql://localhost:3306?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";// 以下是 MySQL 5.7 及以下return "jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000}if (isPostgreSQL()) {return "jdbc:postgresql://localhost:5432/postgres"; //TODO 改成你自己的}if (isSQLServer()) {return "jdbc:jtds:sqlserver://localhost:1433/pubs;instance=SQLEXPRESS"; //TODO 改成你自己的}if (isOracle()) {return "jdbc:oracle:thin:@localhost:1521:orcl"; //TODO 改成你自己的}if (isDb2()) {return "jdbc:db2://localhost:50000/BLUDB"; //TODO 改成你自己的}return null;}@Overridepublic String getDBAccount() {if (isMySQL()) {return "root"; //TODO 改成你自己的}if (isPostgreSQL()) {return "root"; //TODO 改成你自己的}if (isSQLServer()) {return "root"; //TODO 改成你自己的}if (isOracle()) {return "root"; //TODO 改成你自己的}if (isDb2()) {return "root"; //TODO 改成你自己的}return null;}@Overridepublic String getDBPassword() {if (isMySQL()) {return "root"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用, 默认密码为空字符串 ""}if (isPostgreSQL()) {return null; //TODO 改成你自己的}if (isSQLServer()) {return "root"; //TODO 改成你自己的}if (isOracle()) {return "root"; //TODO 改成你自己的}if (isDb2()) {return "root"; //TODO 改成你自己的}return null;}
导入表
在APIJSON-Demo/MySQL目录下有一批SQL脚本,他们看起来是这样的
导入完成之后。我们可以把项目跑起来看下,以刚刚配置的项目,项目是否能够连上数据库。其中也有一些初始化数据,可以方便我们测试。
|
语法的使用
基本查询
对接口地址http://localhost:8080/get发送一个JSON格式的请求,查询参数如下
//查询Moment表里面的,ID为12的数据
{"Moment" : {"id" : 12}
}//查询Moment表里面的,ID为12,只返回content列数据
//@column表示你要筛选出的字段,如果是多个字段可以这样写"@column":"id,date,content"
{"Moment": {"id":12,"@column":"content"}
}//同时筛选出,ID在12,15,32中的这三条数据的日期和内容
{"[]": {"Moment":{"id{}":[12,15,32],"@column":"id,date,content"}}
}//筛选ID是10到40之间的, 同时不包含12的数据
{"[]": {"Moment":{"id&{}":">=10,<=40","id!{}":[12],"@column":"id,date,content:text"}}
}//模糊查询content里面包含APIJSON的值
{"[]": {"Moment":{"content$":"%APIJSON%","@column":"id,date,content:text"}}
}//正则表达式^[0-9]+$,查询content为纯数字的数据
{"[]": {"Moment":{"content~":"^[0-9]+$","@column":"id,date,content:text"}}
}//过滤praiseUserIdList里面有82001的JSON数组数据,我们应该这样请求
{"[]": {"Moment":{"praiseUserIdList<>":82001,"@column":"id,date,content,praiseUserIdList"}}
}//数量太多的数据,我们很多时候都需要分页操作,这时候我们可以用类似下面这样的请求
{"[]": {"Moment":{"@column":"id,date,content,praiseUserIdList"},"page": 0,"count": 5}
}//要使用排序的话,这样操作
//"@order":"date-,id,content+"其中,字段的前后顺序表示字段排序的优先级。id和id+是等价的,默认就是升序排列。date-表示将date字段降序排列。
{"[]": {"Moment":{"@column":"id,date,content,praiseUserIdList","praiseUserIdList<>":38710,"@order":"date-,id,content+"}}
}
关联查询
现在有两张表USER和MOMENT,两张表的关系是下面这样
可以这样写
{"[]": {"Moment":{"@column":"id,date,userId","id":12},"User":{"id@":"/Moment/userId","@column":"id,name"}}
}
User是与Moment相关联的数据,所以查询的时候我们需要用id@来表示他们之间的关联关系
/Moment/userId中,最开始的/相当于是指明了[]的位置,/Moment表示[]对象下的Moemnt对象,/Moment/userId表示Moemnt的userId字段是与User的id关联的。这是一种缺省引用路径,这里等价于完整引用路径 []/Moment/userId。
分组查询
我们需要先了解下APIJSON所支持的函数
函数名 | 说明 |
---|---|
count | 统计分组下,某字段的个数 |
sum | 统计分组下,某字段的和 |
max | 统计分组下,某字段的最大值 |
min | 统计分组下,某字段的最小值 |
avg | 统计分组下,某字段的平均值 |
//查询单纯的查出最大值,这样请求就可以了
//这里maxid是我们取的别名
{"Moment":{"@column":"max(id):maxid"}
}//我们想要计算出这天每个店铺一共卖了多少,我们通过APIJSON可以这样查询
//如果是有分组条件的,那我们需要使用@group
{"[]": {"Sale":{"@column":"store_id,sum(amt):totAmt","@group":"store_id"}}
}
最后总结
APIJSON帮助了我们后端简化了很多步骤,让我们开发效率可以大幅增加,需要什么就拿什么,也可以让前端也参与进来一起编程。
关于使用的性能,安全这里我觉还是需要留意一下的。
上面的语法只是列出了一下比较常用的查询方法,有兴趣的小伙伴可以去 这里找找看 APIJSON通用文档
APIJSON使用和搭建相关推荐
- Tencent APIJSON 零代码、全功能、强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构
项目介绍 零代码.全功能.强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构. A JSON Transmission Protocol and an ORM ...
- APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置
文章目录 一.项目导入 二.数据库搭建及配置 三.运行项目并访问接口 四.apijson语法 1.查询 2.插入数据 3.修改数据 4.删除数据 5.登录 五.如何新增接口 六.大坑 1.id 最近因 ...
- APIJSON 自动化接口和文档的快速开发神器
认识APIJSON APIJSON是一种JSON传输结构协议.客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得.一次请求任意结构任意数据,方便灵活, ...
- 正式压力测试:locust进阶,超简单搭建生产级locust集群
locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust
- 使用Docker搭建svn服务器教程
使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...
- hexo-github-博客搭建指南
经过一天的折腾,总算是把博客搭建好了,在这里记录下搭建博客过程中参考的资料.搭建这个博客的主要目的是记录自己的学习.成长过程,而是否有人看,又有多少人看对我来说不是重点. 搭建博客过程重要参考以下几个 ...
- Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建
Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...
- Windows10+Anaconda3+Pycharm环境搭建
Windows10+Anaconda3+Pycharm环境搭建 一.安装Anaconda3 1.进入 anconda官网,下载Anaconda3 2.安装,选项默认继续安装(可以自行更改安装位置),等 ...
- centos7httpd服务的搭建
---------------------------------------httpd搭建--------------------------------------------- yum inst ...
最新文章
- linux lua ide,mac os上开发lua用什么ide
- System x迈向更多领域 国内超算步入全面发展时代
- C和C++中的野指针问题
- 华为odc是什么意思_华为不造车!但任正非加了一个有效期,3年
- css之文本溢出处理 | 背景图片处理
- 王思聪花了100万的组装的电脑,网速到底有多快?
- rom lg g2 f320d android 4.4.2,LG G2(F320K/S/L/D8001/D802)官方KDZ刷机教程
- android gridview 详解,Android开发 GridView详解
- 线性代数 第四章 线性方程组 知识点总结(Jeff自我感悟)
- LaTex 常用的数学字体
- 在苹果Mac上如何恢复已删除的用户?
- App/QoE-Based Congestion control
- OpenGL3.3-SSAO
- css_使div中的文本自动换行
- VB文本框textbox的那点事
- 2019百度搜索风云榜公布:元尊、圣墟、逆天邪神位列前三名
- 清华大学计算机系哪个专业就业前景最好,清华大学有哪些专业最好就业?很多人都不知道!...
- 2020nyist第三场个人赛
- 说说如何在 Excel 中构建类似 Microsoft Project 中的任务层级结构
- C++3.4数据结构之队列基础+blah数集题解
热门文章
- AXI_BRAM和AXI_Stream FIFO的通信
- 使用BRAM进行位宽转换
- 微信开发,分享部分出现的问题
- 无用代码去哪了?项目减重之 rollup 的 Tree shaking
- Ubuntu 16.04 使用docker资料汇总与应用docker安装caffe并使用Classifier(ros kinetic+usb_cam+caffe)
- JS原生 未来元素监听写法
- Ubuntu 关闭软件更新通知及自动更新
- 基于Django框架的网络云盘设计
- 解决域名被劫持的方案?
- java ftp 设置编码_java ftp上传下载,下载文件编码设置