3 Star 2 Fork 441

食得落 / hasor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
阿库玛 提交于 2020-03-26 14:17 . 1. 补充 README.md

DataQL 数据查询引擎

  DataQL(Data Query Language)DataQL 是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。

  数据的存储根据其业务形式通常是较为简单的,并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作,这就是 DataQL 极力解决的问题。

  例如:下面这个 DataQL 从 user 函数中查询 id 为 4 的用户相关信息并返回给应用。

return userByID({'id': 4}) => {
    'name',
    'sex' : (sex == 'F') ? '' : '' ,
    'age' : age + ''
}

返回结果:

{
  'name' : '马三',
  'sex'  : '男',
  'age'  : '25岁'
}

特性

  1. 层次结构:多数产品都涉及数据的层次结构,为了保证结构的一致性 DataQL 结果也是分层的。
  2. 数据为中心:前端工程是一个比较典型的场景,但是 DataQL 不局限于此(后端友好性)。
  3. 弱类型定义:语言中不会要求声明任何形式的类型结构。
  4. 简单逻辑:具备简单逻辑处理能力:表达式计算、对象取值、条件分支、lambda和函数。
  5. 编译运行:查询的执行是基于编译结果的。
  6. 混合语言:允许查询中混合任意的其它语言代码,典型的场景是查询中混合 SQL 查询语句。
  7. 类 JS 语法:类JS语法设计,学习成本极低。

样例

public class UserByIdUdf implements Udf {
    public UserInfo call(Hints readOnly, Object[] params) {
        ...
    }
}

public class ConsoleDemo {
    public static void main(String[] args) {
        AppContext appContext = Hasor.create().build((QueryModule) apiBinder -> {
            apiBinder.addShareVarInstance("userByID", new UserByIdUdf());

        });
        DataQL dataQL = appContext.getInstance(DataQL.class);
        QueryResult queryResult = dataQL.createQuery("return userByID({'id': 4}) => {" +
                                                     "    'name'," +
                                                     "    'sex' : (sex == 'F') ? '男' : '女' ," +
                                                     "    'age' : age + '岁'" +
                                                     "}").execute();
        DataModel dataModel = queryResult.getData();
    }
}
Java
1
https://gitee.com/alenfive/hasor.git
git@gitee.com:alenfive/hasor.git
alenfive
hasor
hasor
master

搜索帮助