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 ...
最新文章
- 【c语言】蓝桥杯算法训练 斜率计算
- 【 Verilog HDL 】进一步了解 Verilog HDL 的赋值运算符
- Python攻克之路-random模块
- 第一篇:Django基础
- ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
- echarts图使用tab和下拉切换
- Android中style和theme的区别
- 数组引用--冒泡排序 数组倒置为例
- 设置文字不能被选中复制
- 原来flash player对图片的解码不是异步的,AIR2.6后就异步了
- 特斯拉退市,是一个工程师的执拗
- 名词解释:什么是RSS? [转贴]
- mysql复制(高可用架构方案的基础)
- 处理键盘上升盖住文本框问题
- 基于IOS的仿微博系统
- oracle的varchar用法,Oracle数据库中的varchar,varchar2,nvarchar,nvarchar2区别及用法
- python word文档转html
- web前端开发初学者,html的介绍及常用标签
- qt中采用G.729A进行网络语音通话实验程序
- SSM-Mybatis的Mapper.xml配置文件
热门文章
- 百鸡问题扩展-N鸡问题N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。 有几种买法呢?这就是N鸡问题。
- BigDecimal 值 0E-7
- Vue非父子组件传值
- 嵌入式C语言构造类型与ASCII码表
- 昂楷科技与阿里云、腾讯云、华为云等多家云服务企业达成合作,共筑云安全
- C#跨线程更新控件(UI)使用delegate方式
- h5 利用getUserMedia 实现 只调用摄像头
- 详解SVM支持向量机算法(一:感知器和SVM的优点)
- Centos 安装 rundeck3.0.5
- 全国首个三高移动健康管理云平台在武汉启动