前言
最近在正式迭代中插入了一个大屏演示项目,因为后端开发人员任务都安排满了,而演示项目逻辑比较简单,大多是直接查表就能搞定,所以只能想办法让前端直接和数据库交互,增加开发速度。在找工具时发现了ApiJson。尝试使用了一下,在这里和大家做一个分享。
使用的详尽文档建议大家查阅官方文档,都是中文,也很详尽。本文主要是提炼了部分关键操作,帮助大家以最快的速度上手使用apiJson。
ApiJson介绍:
可以简单理解它是一个可以直接通过api接口调用的ORM层框架。使用基本就是将ApiJson项目部署起来,然后直接通过API调用就能进行表的读写操作。
官网地址:腾讯APIJSON官方网站
部署
step1:
进入项目的git地址,下载 APIJSONBoot。附地址:https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot
step2:
修改项目下的 DemoSQLConfig 为自己的数据库配置:
step3:
在数据库中执行一些初始化的sql脚本。脚本地址如下:
https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server
step4:
启动项目(项目本身是一个springboot项目,启动方式,部署到环境的方式,都和普通的springboot项目一样)。
**注:为了快速上手, DemoController中,加入如下代码,屏蔽掉登录校验 **
@Override
public Parser<Long> newParser(HttpSession session, RequestMethod method) {
return super.newParser(session, method).setNeedVerify(false); // TODO 这里关闭校验,方便新手快速测试,实际线上项目建议开启
}
使用
1. 查询
查询的接口统一为:http://localhost:端口号/get
通过不同的入参,来实现不同的查询(有点儿像es的玩法)
例如:在postman中,
uri输入:http://localhost:端口号/get
mothed:POST
请求体:
{
"Moment": {
"id": 12
}
}
就可以查询到 数据库中 Moment表中,id=12的数据
注意一个小坑,请求中的表名首字母必须是大写的,所以数据库如果大小写敏感,数据库表的首字母也需要大写。如果数据库表名是小写,则需要在 DemoSQLConfig中配置映射,将书库表名映射为首字母大写的名称才行
1)简单查询
{
"Moment": { -- 表明,例如表名称为 Moment
"id": 12, -- 字段名和值 ,例如,id为12
"desc":"haha" -- 多字段查询,每个字段一行json
"@Order":"id-" -- 根据id降序 —代表降序 +升序,多个字段之间,隔开
}
}
2)字段过滤
{
"Moment": {
"id": 12,
"@column": "content" -- 可以用,隔开多个列名
}
}
3)查询多个数据,in语句使用
{
"[]": { --- [] 代表查集合
"Moment": { --- 表名
"id{}": [12, 15, 32], --- id的集合。{}可以理解成 条件是一个对象
"@column": "id,date,content" --- 查某几个列
}
}
}
4)where条件中的逻辑运算符
这段语句等价于
select id,date,content:text fromg Moment where (id between 10 and 40 ) and id not in (12)
{
"[]": {
"Moment": {
"id&{}": ">=10,<=40",
"id!{}": [12],
"@column": "id,date,content:text"
}
}
}
5) 模糊搜索
{
"[]": {
"Moment": {
"content$": "%APIJSON%", --- 模糊搜索
"@column": "id,date,content:text"
}
}
}
6)分页
{
"[]": {
"Moment": {
"@column": "id,date,content,praiseUserIdList"
},
"page": 0,
"count": 5 --- 注意,分页参数在 [] 下的一层,和表名同级
}
}
7) 组合查询
selet m.id, ,.data, m.userId, u.id, u.name from Monent m left join User u on m.userId = u,id
Monent 表的 userId 和 User表的 id关联,查询数据
{
"[]": {
"Moment": {
"@column": "id,date,userId",
"id": 12
},
"User": {
"id@": "/Moment/userId",
"@column": "id,name"
}
}
}
这种查询结果和我们平时sql不太一样,稍微看一下返回结果:
{
"[]": [
{ ------------------ 这里开始 ---------------
"Moment": { -------- 一个数据内,把moment和user分开了
"date": "2017-02-08 16:06:11.0",
"id": 12,
"userId": 70793
},
"User": { --------- 这是关联的user对象 ----------
"id": 70793,
"name": "Strong"
}
} ------------------这里结束 是一个数据 ---------------
],
"code": 200,
"msg": "success"
}
8)分组及函数
这几个是apiJson支持的聚合函数
函数名 | 说明 |
---|---|
count | 统计分组下,某字段的个数 |
sum | 统计分组下,某字段的和 |
max | 统计分组下,某字段的最大值 |
min | 统计分组下,某字段的最小值 |
avg | 统计分组下,某字段的平均值 |
使用:
直接用
{
"[]": {
"Moment": {
"@column": "max(id):maxid"
}
}
}
和分组一起用
{
"[]": {
"Sale":{
"@column":"store_id;sum(amt):totAmt",
"@group":"store_id"
}
}
}
2.新增
uri改一下:http://localhost:8080/post
{
"Moment": {
"content": "今天天气不错,到处都是提拉米苏雪",
"userId": 38710
},
"tag": "Moment"
}
3.修改
Mothed:PUT
{
"Moment": {
"id": 1544520921923,
"content": "海洋动物数量减少,如果非吃不可,不点杀也是在保护它们"
},
"tag": "Moment"
}
4.删除
Mothed:Delete
{
"Moment": {
"id": 1544520921923
},
"tag": "Moment"
}
其他
本文知识简单的记录以下apiJson的一些使用,方便大家快速启动。详细内容看官网,很详细,我的例子也都是官网摘的 腾讯APIJSON官方网站