后端神器Dataway入门

后端神器Dataway入门文章目录 Dataway 框架概述 Hasor 简介 Dataway 接口配置服务 Dataway 介绍 Dataway 的主打场景 Dataway 的技术架构 DataQL 聚合查询引擎 DataQL 介绍 SpringBoot 整合 Dataway 引入依赖启用 Hasor 启用 Dataway 初始化必要的表 MySQL 初始化数据源启动工程配置接口 Dataway 框架概述 Hasor 简介 Hasor 是由多个不同系列框架组合而成的一个框架体系 这些子框架的能力涵盖了 IoC Aop WebMVC 数据库以及其他的方方面面 这一切的基础要归功于 Haso

Dataway框架概述

Hasor简介

Hasor是由多个不同系列框架组合而成的一个框架体系。这些子框架的能力涵盖了IoC、Aop、WebMVC、数据库以及其他的方方面面。这一切的基础要归功于Hasor的插件化能力。

Dataway接口配置服务

Dataway介绍

Dataway是基于DataQL服务聚合能力,为应用提供一个接口配置工具。是的使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以jar包放上提供并集成到应用中并和应用共享同一个http端口,应用无需单独为Dataway开辟新的管理端口。

优点可以是的大部分老项目都可以在无侵入的情况下直接应用Dataway。进而改进老项目的迭代效率,大大减少企业研发成本。

在这里插入图片描述

Dataway工具化的提供了DataQL配置能力。这种研发模式的变革使得,相当多的需求开发场景只需要配置即可完成交付。从而避免了从数据存取到前端接口之间一系列的开发任务。

Dataway的主打场景
  1. 取数据
    • 在一些报表、看板纯展示类的项目中。所有接口可通过配置实现。所有取数逻辑全部通过DataQL+SQL方式满足。
    • 对比往期项目对于后端技术人员的需求从3~5人通宵加班,直接缩减为1人配置化搞定
    • 即使要开发新逻辑,通过DataQL+SQL方式也可以快速完成。
  2. 存数据
    • 如在某个ERP项目中,20多个表单页面。每个表单页面或多或少都有直接将单据数据录入到数据库的场景,每个单据的录入逻辑都有很大的不同,我们通过DataQL+SQL方式在早期用1000行左右的核心代码。其他数据存取逻辑全部配置化完成。
    • 随着DataQL工具链完善,其中绝大部分场景都可以完成配置化无需开发。
  3. 数据聚合
    • 和GraphQL相同,这是设计DataQL的初衷。将数据库和服务等多个接口进行汇聚然后返回给前端,这是DataQL的使命。Dataway使这一过程变得更加简单和高效。
Dataway的技术架构
  • Dataway的架构中需要两张数据库表用来存放配置和发布的DataQL查询。
    在这里插入图片描述

ORM误区:

  • ORM最大的特点是具有Mapping过程,然后通过框架进行CRUD操作。如:Mybatis、Hibernate
  • DataQL有很大不同,虽然DataQL提供了非常出色的基于SQL数据存取能力。但DataQL没有Mapping过程。
  • 造成OEM错觉的适用于DataQL充分利用Udf和Dragment奇妙组合,提供了更便捷的数据存储逻辑配置化。但从技术架构上来审视它并不是ORM。

DataQL聚合查询引擎

DataQL介绍

DataQL(Data Query Language)是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。数据的存储根据其业务形式同城是比较简单的,并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作,这就是DataQL极力解决的问题。

特性

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

举例

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

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

返回结果:

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

UDF 开发:userByID

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(); } } 

参考链接:DataQL 聚合查询引擎 – DataQL 聚合查询引擎 – ClouGence@Hasor

SpringBoot整合Dataway

引入依赖

Dataway是Hasor生态中的一员,使用Dataway第一步需要通过hasor-spring打通连个生态。

 
    <dependency> <groupId>net.hasor 
     groupId> <artifactId>hasor-spring 
      artifactId> <version>4.2.2 
       version>  
        
        dependency> <dependency> <groupId>net.hasor 
         groupId> <artifactId>hasor-dataway 
          artifactId> <version>4.2.2 
           version>  
            
            dependency> 

启用Hasor

@EnableHasor() // 在Spring中启用Hasor @EnableHasorWeb() // 将 hasor-web配置到Spring环境中,Dataway的UI通过hasor-web提供服务。 @SpringBootApplication public class Application { 
    public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); } } 

只需要在Spring启动类上增加上面连个注解即可。

启用Dataway

在应用配置文件汇总启用Dataway

application.properties中配置:

# 启用 Dataway 功能(默认不启用) HASOR_DATAQL_DATAWAY=true # 开启 ui 管理功能(注意生产环境必须要设置为 false,否则会造成严重的生产安全事故) HASOR_DATAQL_DATAWAY_ADMIN=true # (可选)API工作路径 HASOR_DATAQL_DATAWAY_API_URL=/api/ # (可选)ui 的工作路径,只有开启 ui 管理功能后才有效 HASOR_DATAQL_DATAWAY_UI_URL=/interface-ui/ 

application.yml中配置:

# 启用 Dataway 功能(默认不启用) HASOR_DATAQL_DATAWAY: true # 开启 ui 管理功能(注意生产环境必须要设置为 false,否则会造成严重的生产安全事故) HASOR_DATAQL_DATAWAY_ADMIN: true # (可选)API工作路径 HASOR_DATAQL_DATAWAY_API_URL: /api/ # (可选)ui 的工作路径,只有开启 ui 管理功能后才有效 HASOR_DATAQL_DATAWAY_UI_URL: /interface-ui/ 

初始化必要的表(MySQL)

CREATE TABLE interface_info ( api_id varchar(64) NOT NULL COMMENT 'ID', api_method varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST', api_path varchar(512) NOT NULL COMMENT '拦截路径', api_status varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用', api_comment varchar(255) NOT NULL COMMENT '注释', api_type varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL', api_script mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx', api_schema mediumtext NOT NULL COMMENT '接口的请求/响应数据结构', api_sample mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据', api_option mediumtext NOT NULL COMMENT '扩展配置信息', api_create_time varchar(32) NOT NULL COMMENT '创建时间', api_gmt_time varchar(32) NOT NULL COMMENT '修改时间', PRIMARY KEY (api_id), UNIQUE KEY uk_interface_info (api_path) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API'; CREATE TABLE interface_release ( pub_id varchar(64) NOT NULL COMMENT 'Publish ID', pub_api_id varchar(64) NOT NULL COMMENT '所属API ID', pub_method varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST', pub_path varchar(512) NOT NULL COMMENT '拦截路径', pub_status varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用', pub_comment varchar(255) NOT NULL COMMENT '注释', pub_type varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL', pub_script mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx', pub_script_ori mediumtext NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同', pub_schema mediumtext NOT NULL COMMENT '接口的请求/响应数据结构', pub_sample mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据', pub_option mediumtext NOT NULL COMMENT '扩展配置信息', pub_release_time varchar(32) NOT NULL COMMENT '发布时间(下线不更新)', PRIMARY KEY (pub_id), KEY idx_interface_release_api (pub_api_id), KEY idx_interface_release_path (pub_path) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。' 

其他数据库建表语句查看官方说明:a. Spring Boot整合 – Dataway接口配置服务 – ClouGence@Hasor

初始化数据源

@DimModule @Component public class ExampleModule implements SpringModule { 
    @Autowired private DataSource dataSource = null; public void loadModule(ApiBinder apiBinder) throws Throwable { 
    // .DataSource form Spring boot into Hasor apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource)); // .custom DataQL //apiBinder.tryCast(QueryApiBinder.class).loadUdfSource(apiBinder.findClass(DimUdfSource.class)); //apiBinder.tryCast(QueryApiBinder.class).bindFragment("sql", SqlFragment.class); } } 

Hasor启动的时候会调用loadModule方法,在这里再把DataSource设置到Hasor中。

启动工程

在启动日志中看到下列信息输出表示Dataway已经可以正常访问了。

2020-04-01 09:13:18.502 [main] INFO n.h.core.context.TemplateAppContext - loadModule class net.hasor.dataway.config.DatawayModule 2020-04-01 09:13:18.502 [main] INFO n.hasor.dataway.config.DatawayModule - dataway api workAt /api/ 2020-04-01 09:13:18.502 [main] INFO n.h.c.e.AbstractEnvironment - var -> HASOR_DATAQL_DATAWAY_API_URL = /api/. 2020-04-01 09:13:18.515 [main] INFO n.hasor.dataway.config.DatawayModule - dataway admin workAt /interface-ui/ 
  • dataway api workAt /api/ 表示 API 的工作路径。
  • dataway admin workAt /interface-ui/ 表示 管理配置界面的地址。

此时访问:http://:/interface-ui/ 就可以看到配置页面了。

在这里插入图片描述
在这里插入图片描述

配置接口

Dataway提供两种语言模式,可以使用DataQL也可以直接使用SQL(Dataway内部SQL会被转为DataQL的形式执行)

具体操作页面说明可看如下链接:

列表页:b. 列表页 – Dataway接口配置服务 – ClouGence@Hasor

新建/编辑页:c. 新建/编辑页 – Dataway接口配置服务 – ClouGence@Hasor

API管理指南:d. API 管理指南 – Dataway接口配置服务 – ClouGence@Hasor

外部链接:
Hasor 项目的首页:https://www.hasor.net/web/index.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220344.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:43
下一篇 2026年3月17日 下午8:43


相关推荐

  • 阿里云通义千问 Qwen3-Coder 宣布开源:480B 参数、原生支持 256K 上下文,可与 Claude Sonnet4 媲美

    阿里云通义千问 Qwen3-Coder 宣布开源:480B 参数、原生支持 256K 上下文,可与 Claude Sonnet4 媲美

    2026年3月13日
    2
  • java小型图书馆管理系统

    java小型图书馆管理系统根据需求,建立了一个BookMgr类,该类为实现小型图书馆的各个需求。为了和用户有一个良好的交互,根据需求且满足要求中的隐藏条件,先命名了交互的菜单函数printMenu1(),代码如下:publicvoidprintMenu1(){          System.out.println(“欢迎使用图书馆管理系统”);          Syst

    2022年7月8日
    24
  • 【土地利用变化分析】土地利用转移矩阵

    【土地利用变化分析】土地利用转移矩阵国土空间规划怎么会这么忙 奉劝看到这里还没进规划院的同志能腾出点时间去做点自己想做的事的光景一去不返 辞职的念头一天又一天 我说去练画都说了有一年连笔杆子都没摸过 偷得时间写一篇土地利用转移矩阵 一 土地利用转移矩阵定义 太长不看系列 土地利用转移矩阵 就是根据同一地区不同时相的土地覆盖现状的变化关系 求得一个二维矩阵 通过对得到的转移矩阵进行分析 能够得到 个时相 不同的地类之间相互转化的情况 它描述了不同的土地利用的类型在不同年份发生变化的土地类别以及发生变化的位置和

    2026年3月19日
    1
  • Django模板系统「建议收藏」

    Django模板系统「建议收藏」Django模板系统官方文档常用语法只需要记两种特殊符号:{{}}和{%%}变量相关的用{{}},逻辑相关的用{%%}。变量{{变量名}}变量名由字母数字和下划线组成。点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。几个例子:view中代码:deftemplate_test(request):l=[11,2…

    2022年7月19日
    18
  • 2026年OpenClaw记忆升级指南:Mem0插件集成+一键部署+免费API配置及避坑指南

    2026年OpenClaw记忆升级指南:Mem0插件集成+一键部署+免费API配置及避坑指南

    2026年3月13日
    3
  • SOP是什么?SOP的作用是什么?如何编写SOP?

    SOP是什么?SOP的作用是什么?如何编写SOP?SOP是由StandardOperationProcedure这三个英文单词的首个字母组合而成。也就是以统一化的标准将操作流程的步骤和要求罗列出来,用于指导和规范日常工作。SOP的核心,就是把特定流程的关键问题细化及量化。SOP是以文件的方式归纳总结操作人员在实际生产过程中的具体操作步骤和应当要注意的事项,它是车间现场操作人员的作业指导模板,也是质量检验人员用于检测指导工作的依据。SOP的作用:1、把企业长期累积的经验技术记录归纳,汇总成简单易懂的标准化文件,即使出现操作人员变动也不会使已有的技

    2022年5月9日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号