APIJSON使用和搭建

  • APIJSON的介绍
    • 这是什么
    • 这有什么用
    • 对我们的项目好处有哪些
    • 功能流程图
  • 项目的搭建
    • 安装&使用
    • 修改数据库链接
    • 导入表
  • 语法的使用
    • 基本查询
    • 关联查询
    • 分组查询
  • 最后总结

APIJSON的介绍

这是什么

APIJSON是一种专为API而生的 JSON网络传输协议 以及 基于这套协议实现的ORM库

这有什么用

为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。

对我们的项目好处有哪些

通过自动化API,前端可以定制任何数据、任何结构!
大部分HTTP请求后端再也不用写接口了,更不用写文档了!
前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了

功能流程图

一般Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程

部署上这个项目后,流程变成了这样


使用这个项目作为后端的支持的话,是不需要对每个表写增删改查等接口的,只需在该项目连接的数据里进行表的创建,以及配置接口权限即可。无需进行过多的开发,哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目,现在需要些的接口就基本写好了,直接调用就行了,是不是挺爽的。

项目的搭建

安装&使用

  1. 配置开发环境 推荐使用: JDK: 1.8 , Maven: 3.0+ , Mysql
  2. 下载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使用和搭建相关推荐

  1. Tencent APIJSON 零代码、全功能、强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构

    项目介绍 零代码.全功能.强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构. A JSON Transmission Protocol and an ORM ...

  2. APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置

    文章目录 一.项目导入 二.数据库搭建及配置 三.运行项目并访问接口 四.apijson语法 1.查询 2.插入数据 3.修改数据 4.删除数据 5.登录 五.如何新增接口 六.大坑 1.id 最近因 ...

  3. APIJSON 自动化接口和文档的快速开发神器

    认识APIJSON APIJSON是一种JSON传输结构协议.客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得.一次请求任意结构任意数据,方便灵活, ...

  4. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  5. 使用Docker搭建svn服务器教程

    使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...

  6. hexo-github-博客搭建指南

    经过一天的折腾,总算是把博客搭建好了,在这里记录下搭建博客过程中参考的资料.搭建这个博客的主要目的是记录自己的学习.成长过程,而是否有人看,又有多少人看对我来说不是重点. 搭建博客过程重要参考以下几个 ...

  7. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  8. Windows10+Anaconda3+Pycharm环境搭建

    Windows10+Anaconda3+Pycharm环境搭建 一.安装Anaconda3 1.进入 anconda官网,下载Anaconda3 2.安装,选项默认继续安装(可以自行更改安装位置),等 ...

  9. centos7httpd服务的搭建

    ---------------------------------------httpd搭建--------------------------------------------- yum inst ...

最新文章

  1. 【c语言】蓝桥杯算法训练 斜率计算
  2. 【 Verilog HDL 】进一步了解 Verilog HDL 的赋值运算符
  3. Python攻克之路-random模块
  4. 第一篇:Django基础
  5. ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
  6. echarts图使用tab和下拉切换
  7. Android中style和theme的区别
  8. 数组引用--冒泡排序 数组倒置为例
  9. 设置文字不能被选中复制
  10. 原来flash player对图片的解码不是异步的,AIR2.6后就异步了
  11. 特斯拉退市,是一个工程师的执拗
  12. 名词解释:什么是RSS? [转贴]
  13. mysql复制(高可用架构方案的基础)
  14. 处理键盘上升盖住文本框问题
  15. 基于IOS的仿微博系统
  16. oracle的varchar用法,Oracle数据库中的varchar,varchar2,nvarchar,nvarchar2区别及用法
  17. python word文档转html
  18. web前端开发初学者,html的介绍及常用标签
  19. qt中采用G.729A进行网络语音通话实验程序
  20. SSM-Mybatis的Mapper.xml配置文件

热门文章

  1. 百鸡问题扩展-N鸡问题N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。 有几种买法呢?这就是N鸡问题。
  2. BigDecimal 值 0E-7
  3. Vue非父子组件传值
  4. 嵌入式C语言构造类型与ASCII码表
  5. 昂楷科技与阿里云、腾讯云、华为云等多家云服务企业达成合作,共筑云安全
  6. C#跨线程更新控件(UI)使用delegate方式
  7. h5 利用getUserMedia 实现 只调用摄像头
  8. 详解SVM支持向量机算法(一:感知器和SVM的优点)
  9. Centos 安装 rundeck3.0.5
  10. 全国首个三高移动健康管理云平台在武汉启动