Atitit QL查询语言总结

目录

1. QL = Query Language, 是查询语言的简称 1

2. 模型 2

2.1. 内嵌语言执行 2

2.2. 语言互操作 2

3. 具体实现 2

3.1. Httpparam ql 2

3.2. Aql 受限自然语言QL  4.5G 2

3.3. Jpql 2

3.4. Spel (调用java等扩展,集合投影选择等) 2

3.5. Ongl (调用java等扩展,集合投影选择等) 2

3.6. 安全sql 3

4. 流程控制pcl类ql 3

4.1. SQL pcl 3

4.2. Js pcl 3

4.3. Apcl 3

5. 其他感觉可以放后的东东 4

5.1. Es query string search 4

5.2. Es json query 4

5.3. GraphQL 4

5.4. 认识APIJSON ( ) 5

6. 问题 7

6.1. 语言的内嵌解决,通过特定api解决 类似jdbc等 7

6.2. 流程控制的ast互相转换问题 7

7. ref  7

  1. QL = Query Language, 是查询语言的简称

QL = Query Language, 是查询语言的简称, QL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余。它弥补了RESTful API(字段冗余,扩展性差、无法聚合api、无法定义数据类型、网络请求次数多)等不足。

  1. 模型

    1.  内嵌语言执行

,需要特定api。。重要是sql,java的调用。。

  1. 语言互操作
  1. 具体实现

    1. Httpparam ql
    2. Aql 受限自然语言QL  4.5G
    3. Jpql 
    4. Spel (调用java等扩展,集合投影选择等)
    5. Ongl (调用java等扩展,集合投影选择等)

OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。

为什么使用OGNL
  相对于其它的表达式语言,OGNL的功能更为强大,它提供了很多高级而必需的特性,例如强大的类型转换功能、静态或实例方法的执行、跨集合投影,以及动态lambda表达式定义等。

访问静态方法和静态字段
@class@method(args) //调用静态方法
@class@field    //调用静态字段
  其中class必须给出完整的类名(包括包名),如果省略class,那么默认使用的类是java.util.Math,如:
@@min(5,3)
@@max(5,3)
@@PI

  • 投影
    OGNL提供了一种简单的方式在一个集合中对每一个元素闻调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合,称之为投影。
         假如employees是一个包含了employee对象的列表,那么
    #employees.{name}将返回所有雇员的名字的列表。
         在投影期间,使用#this变量来引用迭代中的当前元素。
           如:objects.{#this instanceof String? #this: #this.toString()}
      3、选择
    OGNL提供了一种简单的方式来使用表达式从集合中选择某些元素,并将结果保存到新的集合中,称为选择。
          如#employees.{?#this.salary>3000}
          将返回薪水大于3000的所有雇员的列表。
    #employees.{^#this.salary>3000}
          将返回第一个薪水大于3000的雇员的列表。
    #employees.{$#this.salary>3000}
          将返回最后一个薪水大于3000的雇员的列表。

    1. 安全sql
  1. 流程控制pcl类ql

    1. SQL pcl
    2. Js pcl
    3. Apcl

Apcl 流程控制语言

流程控制是不是使用js等脚本更好些??

  1. 其他感觉可以放后的东东

    1. Es query string search
    2. Es json query 
    3. GraphQL

注意:GraphQL是api的查询语言,而不是数据库。从这个意义上说,它是数据库无关的,而且可以在使用API的任何环境中有效使用,我们可以理解为GraphQL是基于API之上的一层封装,目的是为了更好,更灵活的适用于业务的需求变化。

GraphQL不仅仅是替代RESTful API,GraphQL结合 Apollo Client 可以替我们管理应用中所有的数据,包括缓存和数据拼接。 Apollo Client甚至有可能代替 react中的redux以及Vue中的Vuex 成为通用数据管理方案的可能。

为什么推荐用GraphQL方案?

1.由前端定义需要哪些字段,要什么写什么

2.再也不需要对接口的文档进行维护了(自动生成文档,代码里定义的结构就是文档)

3.一个接口能够适用多个业务场景

4.再也不用改bug了(强类型,自动校验入参出参类型)

5.所有的接口都在一颗数下,一目了然,再也不用前端去写假数据了(代码里定义好结构之后自动生成mock接口

6.再不用痛苦的联调了(代码里定义好结构之后,自动生成接口在线调试工具,直接在界面里写请求语句来调试返回,而且调试的时候各种自动补全

7.react/vue/express/koa无缝接入(relay方案/apollo方案)

8.更容易写底层的工具去监控每个接口的请求统计信息(都在同一个端点的请求下)

9.不限语言,除了官方提供的js实现,其他所有的语言都有社区的实现

10.拥有各种方便易用的开发者工具

总结:

GraphQL 如今是一门很成熟的技术了,几乎所有的语言都对其有所支持。如果要采用 GraphQL,一定要注意要控制其灵活性,并做好性能的 benchmark。如果想要将已有的 API 系统迁移到 GraphQL,初期可以使用 GraphQL 包装已有的 REST API,让客户端工程师尽情试验。随后再根据重要性和紧迫程度逐步一个个重写已有的 API,切忌一上来就全部推到重写

  1. 认识APIJSON ( )

APIJSON是一种JSON传输结构协议。客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得。一次请求任意结构任意数据,方便灵活,不需要专门接口或多次请求。支持增删改查、模糊搜索、远程函数调用等。还能去除重复数据,节省流量提高速度!从此HTTP传输JSON数据没有接口,更不需要文档!

而APIJSON则默认返回全部字段,可选 @column 来指定需要的字段。

"@column":"key0,key1,..."

例如

{

"User":{

"id":38710,

"@column":"id,name"

}

}

就以目前最流行的开源数据库MySQL为例吧:

转存失败重新上传取消转存失败重新上传取消

如图所示,MySQL的基础功能中:

GraphQL仅支持极少的几个,而且全都要后端手动实现;

但APIJSON全都支持,而且全都是自动化的实现!

  1. 问题

    1. 语言的内嵌解决,通过特定api解决 类似jdbc等

是的一种语言内部可以调用另外一种dsl

  1. 流程控制的ast互相转换问题

直接使用sql的流程ast即可,方便转换sql。。

如果使用js的,需要解析到到js ast,在转换回sql ast

  1. ref
     

UnQL:NoSQL查询语言介绍 - Nosql-炼数成金-Dataguru专业数据分析社区.html

Hive查询语言(HiveQL) - u013402321的博客 - CSDN博客.html

PartiQL:一种用于所有数据的查询语言-InfoQ.html

ONGL简介 - 心扬 - 博客园.html

Atitit QL查询语言总结 目录 1. QL = Query Language, 是查询语言的简称 1 2. 模型 2 2.1. 内嵌语言执行 2 2.2. 语言互操作 2 3. 具体实现 2相关推荐

  1. mysql学习笔记(1)_DQL(Data Query Language)

    ##DQL(data query language)数据库查询语言 基础查询   条件查询 排序查询 (order by) 常用函数 分组查询(group by) 多表查询 子查询 分页查询(limi ...

  2. 结构化查询语言(Structured Query Language)

    2019独角兽企业重金招聘Python工程师标准>>> 结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ " ...

  3. SQL:结构化查询语言(Structured Query Language)。

    SQL:结构化查询语言(Structured Query Language). 是关系型数据库标准语言. 特点:简单,灵活,功能强大. -------------------------------- ...

  4. 07--MySQL自学教程:DQL(Data Query Language:数据库查询语言)简介、基础查询、条件查询、模糊查询以及排序(一)

    1. DQL(Data Query Language:数据库查询语言)知识点概览 DQL(Data Query Language:数据库查询语言): 用来查询数据(记录),不会对数据进行改变,而是让数 ...

  5. Oracle结构化查询语言(Structured Query Language)

    SQL是结构化查询语言(Structured Query Language) 专门用于数据存取.数据更新及数据库管理等操作. 此文后积累学习用SQL语句对数据库的表进行增删改查的操作. 在Oracle ...

  6. SQL(Structured Query Language)结构化查询语言

    SQL(Structured Query Language)结构化查询语言 高度的非过程化语言,是专门为操作关系型数据库而开发的,是关系型数据库的标准语言.用户只需要提出 "做什么" ...

  7. SQL(Structure Query Language)结构化查询语言详解

    SQL(Structure Query Language)结构化查询语言是数据库的核心语言. SQL语言共分为4大类: DQL(Data Query Language)数据查询语言 关键字:SELEC ...

  8. 结构化查询语言(Structured Query Language)与数据库分类

    结构化查询语言(Structured Query Language),简称SQL,SQL使我们有能力访问数据库,SQL 是一种 ANSI(American National Standards Ins ...

  9. Kusto Query Language (KQL) 学习笔记

    Kusto Query Language (KQL) 学习笔记 Kusto 是一种nosql,其有自身的查询语言规则,简称KQL. 学习笔记持续更新中,点击每个节点的小加号,展开小节内容 KQL学习笔 ...

  10. Hibernate Query Language(HQL)。

    Hibernate Query Language(HQL)提供了十分强大的功能,推荐大家使用这种查询方式.HQL具有与SQL语言类似的语法规范,只不过SQL针对表中字段进行查询,而HQL针对持久化对象 ...

最新文章

  1. Slackware中文帮助文档(前言)
  2. 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
  3. Java编译的运行机制初步讲解
  4. mysql5.7.14启动教程_mysql5.7.14安装配置方法图文详细教程
  5. Python3使用BFS实现湖北省到全国省级行政区
  6. AES加密算法|密码学|网络空间安全
  7. BP神经网络的基本思想,bp神经网络原理简述
  8. 一、运维概述与操作系统概述
  9. Springboot 服务端为App集成支付宝支付
  10. fetch_array()与fetch_assoc()的用法
  11. AS打包的应用安装时解析包错误或没有签名
  12. Windows独享主机网站访问缓慢的原因和解决方法
  13. obs源码分析【八】:显示器采集
  14. Android开发MVP模式(解决了View和Model的耦合)
  15. linux top 命令
  16. Mars的自语重出江湖,祝大家端午节安康
  17. npm安装的yarn遇到【yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次】
  18. xray和rad或burp联动
  19. 1+X云计算平台运维与开发认证(初级)样卷D
  20. Unity为什么ios不能热更新

热门文章

  1. 吴军信息论40讲_刘润对谈吴军:每个人都一定要有数学思维
  2. Python3中如何做的自定义模块的引用?
  3. Confluence 6 重新获得附件指南
  4. centos7.3 安装ansible
  5. 9.2. service
  6. 3. beeGo 自己写Controller 和 请求数据处理
  7. 使用 Python 学习和破解古典密码
  8. c++矩阵的转置和快速转置
  9. Com uma forca, com uma forca
  10. 鸟哥的 Linux 私房菜13-- 学习 BASH Shell 咯