APIJSON-实现一对一,一对多复杂查询
点击上方“青年码农”关注
回复“源码”可获取各种资料
APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。为各种增删改查提供了完全自动化的万能 API,零代码实时满足千变万化的各种新增和变更需求。能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
之前的一篇文章讲解了 APIJSON 的简单用法,链接:APIJSON-零代码接口和文档JSON 协议 与 ORM 库 ,今天说说复杂查询是如何实现的。
在演示查询之前我们先建几个表,Test_user、Test_user_moent_ref(关联表)、Test_moment,关联关系如图

随便添加几条数据,必须保证关联关系是正确的。

我们先用 SQL 查询,查询结果如下

一 单表查询 - 单条数据
1 单条数据
单表查询返回一条数据,用 Test_user 做示例,请求格式如下,
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "Test_user": {}
      
     
- 
     
      
     
     
      
       }
      
     
  APIJSON 会转换为
SELECT * FROM test_user LIMIT 1 OFFSET
  返回格式如下

2 过滤数据
也可以过滤,比如 id=2 的数据
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "Test_user": {
      
     
- 
     
      
     
     
      
               "id":"2"
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  
3 判断是否存在
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "Test_user": {
      
     
- 
     
      
     
     
      
               "id}{@": {
      
     
- 
     
      
     
     
      
                   "from": "Test_user_moent_ref",
      
     
- 
     
      
     
     
      
                   "Test_user_moent_ref": {
      
     
- 
     
      
     
     
      
                       "id": 1
      
     
- 
     
      
     
     
      
                   }
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  }{ 表示 EXISTS,@ 后面是 子查询 对象,from 为目标表 Table 的名称;

二 单表查询 - 多条数据
1 多条数据
单表查询返回多条数据,用 Test_user 做示例,请求格式如下,
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]":{
      
     
- 
     
      
     
     
      
           "Test_user": {}
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  返回结果

2 分页查询
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "second_name": "唐三"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  查询结果

3 过滤字段
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]":{
      
     
- 
     
      
     
     
      
           "Test_user": {
      
     
- 
     
      
     
     
      
              "second_name":"唐三"
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  过滤second_name=唐三的数据

4 模糊查询
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "second_name$": "唐%"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  %表示任意字符,上面搜索是以唐开始,可以是任意SQL搜索表达式字符串,如 %key%(包含key), key%(以key开始), %k%e%y%(包含字母k,e,y) 等。

5 正则表达式
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "second_name~": "\u5510"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  正则也很简单,就是把汉字唐转化ASCII码,搜索包含唐的数据

6 连续范围
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "id%": "1,9"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  可以查询范围内的,由于我这边数据比较少,所以用 id 查

7 控制返回字段
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "@column":"second_name",
      
     
- 
     
      
     
     
      
                "id%": "1,9"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  只返回second_name字段

8 给返回字段设置别名
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "@column":"second_name:s_name",
      
     
- 
     
      
     
     
      
                "id%": "1,9"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  second_name设置别名为s_name

9 比较运算
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "id>": "1"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  比较运算符>, <, >=, <=都支持,不支持key=和key!=这两种,而是使用更为简单的 "key":Object 和 "key!":Object 替代。

10 逻辑运算
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
          "[]": {
      
     
- 
     
      
     
     
      
             "count": 10,
      
     
- 
     
      
     
     
      
             "page": 0,
      
     
- 
     
      
     
     
      
             "Test_user": {
      
     
- 
     
      
     
     
      
                "id&{}": ">1,<3"
      
     
- 
     
      
     
     
      
             }
      
     
- 
     
      
     
     
      
          }
      
     
- 
     
      
     
     
      
       }
      
     
  逻辑运算符&, |, !都支持,但是使用场景不同
- & 可用于"key&{}":"条件"等 
- | 可用于"key|{}":"条件", "key|{}":[]等,一般可省略 
- ! 可单独使用,如"key!":Object,也可像&,|一样配合其他功能符使用 

三 两张表-一对一关联查询
用Test_user和Test_user_moent_ref做示例,通过Test_user的id字段和Test_user_moent_ref的entity_id字段关联
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "Test_user": {},
      
     
- 
     
      
     
     
      
           "Test_user_moent_ref":{
      
     
- 
     
      
     
     
      
               "entity_id@":"/Test_user/id"
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  返回两个表的所有字段

可以指定返回字段


四 两张表-一对多关联查询
还是Test_user和Test_user_moent_ref做示例,通过Test_user的id字段和Test_user_moent_ref的entity_id字段关联
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "Test_user": {},
      
     
- 
     
      
     
     
      
           "Test_user_moent_ref[]":{
      
     
- 
     
      
     
     
      
               "Test_user_moent_ref":{
      
     
- 
     
      
     
     
      
                   "entity_id@":"Test_user/id"
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  返回数据如下

五 两张表-数组内一对一关联查询
通过 Test_user 的 id 字段和 Test_user_moent_ref 的 entity_id 字段关联
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "[]":{
      
     
- 
     
      
     
     
      
               "Test_user": {},
      
     
- 
     
      
     
     
      
               "Test_user_moent_ref":{
      
     
- 
     
      
     
     
      
                   "entity_id@":"[]/Test_user/id"
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  其中
"entity_id@":"[]/Test_user/id
  要根据 Test_user 在数组中的位置 index 来动态改变
请求返回格式

六 两张表-数组内一对多关联查询
通过 Test_user 的 id 字段和 Test_user_moent_ref 的 entity_id 字段关联
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "[]":{
      
     
- 
     
      
     
     
      
               "Test_user": {},
      
     
- 
     
      
     
     
      
               "Test_user_moent_ref[]":{
      
     
- 
     
      
     
     
      
               "Test_user_moent_ref":{
      
     
- 
     
      
     
     
      
                   "entity_id@":"[]/Test_user/id"
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  注意事项和上面一样,返回格式如下

七 三张表及以上查询
通过 Test_user 的 id 字段和 Test_user_moent_ref 的 entity_id 字段关联,Test_user_moent_ref 的 component_id 字段和 Test_monent 的 id 字段关联,查询方式和上面大同小异。
   
    - 
     
      
     
     
      
       {
      
     
- 
     
      
     
     
      
           "[]": {
      
     
- 
     
      
     
     
      
               "join": "</Test_user_moent_ref,</Test_monent",
      
     
- 
     
      
     
     
      
               "Test_user": {
      
     
- 
     
      
     
     
      
                   "@column":"id,second_name"
      
     
- 
     
      
     
     
      
               },
      
     
- 
     
      
     
     
      
               "Test_user_moent_ref": {
      
     
- 
     
      
     
     
      
                   "entity_id@": "/Test_user/id"
      
     
- 
     
      
     
     
      
               },
      
     
- 
     
      
     
     
      
               "Test_monent":{
      
     
- 
     
      
     
     
      
                   "id@": "/Test_user_moent_ref/component_id"
      
     
- 
     
      
     
     
      
               }
      
     
- 
     
      
     
     
      
           }
      
     
- 
     
      
     
     
      
       }
      
     
  数据是返回了,但是有点小问题

用 SQL 查询应该是这个样子的,但是返回的数据有点区别。


后续研究透彻再详细讲解多表查询吧,如果有大佬能提供思路,也是非常感谢!
文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/NMGWAP/article/details/126552976
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)