寿光网站建设,晋城客运东站网站开发,淘宝网站内站建设现状,烟台百度网站建设文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway?
官网地址#xff1a;https://www.hasor.net/docs/guides/quickstart Da… 文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway?
官网地址https://www.hasor.net/docs/guides/quickstart Dataway 是依托 DataQL 服务聚合能力为应用提供一个 UI 界面。并以 jar 包的方式集成到应用中。 通过 Dataway 可以直接在界面上配置和发布接口。 这种模式的革新使得开发一个接口不必在编写任何形式的代码只需要配置一条 DataQL 查询即可完成满足前端对接口的需求。 从而避免了从数据库到前端之间一系列的开发配置任务例如Mapper、DO、DAO、Service、Controller 统统不在需要。 Dataway 特意采用了 jar 包集成的方式发布这使得任意的老项目都可以无侵入的集成 Dataway。 直接改进老项目的迭代效率大大减少企业项目研发成本。 Dataway 工具化的提供 DataQL 配置能力。这种研发模式的变革使得相当多的需求开发场景只需要配置即可完成交付。从而避免了从数据存取到前端接口之间的一系列开发任务例如Mapper、BO、VO、DO、DAO、Service、Controller 统统不在需要。
如上图所示 Dataway 在开发模式上提供了巨大的便捷。虽然工作流程中标识了由后端开发来配置 DataQL 接口但这主要是出于考虑接口责任人。但在实际工作中根据实际情况需要配置接口的人员可以是产品研发生命周期中任意一名角色。
2、主打场景
主打场景并不是说 Dataway 适用范围仅限于此而是经过多次项目实践。我们认为下面这些场景会有非常好的预期效果。
比如说 取数据 在一些报表、看板项目中即便是取数据逻辑在复杂。我们依然做到了真正的 零 开发所有取数逻辑全部通过 DataQL SQL 的方式满足。
对比往期项目对于后端技术人员的需求从 35 人的苦逼通宵加班直接缩减为 1 人配置化搞定。
再比如某个内部类 ERP 项目20 多个表单页面后端部分仅有 1000 行左右的核心代码。其它数据存取逻辑全部配置化完成。
取数据
如果你只想从数据库或者服务中获取某类数据不需要VO、BO、Convert、DO、Mapper 这类东西。
存数据
如果是从页面表单递交数据到数据库或者服务免去 BO、FormBean、DO、Mapper 这类东西。
数据聚合
基于服务调用结果经过结构转换并响应给前端。将数据库和服务等多个结果进行汇聚然后返回给前端。
3、技术架构 4、整合SpringBoot
4.1、maven 依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringboot-learning-parents/artifactIdgroupIdorg.example/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersiongroupIdspringboot-demo/groupIdartifactIdspringboot-dataway/artifactIdversion1.0-SNAPSHOT/versionnamespringboot-dataway/namedescriptionspringboot 集成 dataway/descriptionpackagingjar/packagingurlhttps://gitee.com/leo825/springboot-learning-parents.git/urlpropertiesstart-classcom.demo.SpringbootDataWayApplication/start-classproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.versionmybatis.version1.3.2/mybatis.versionmysql.version8.0.28/mysql.versiondataway.version4.2.5/dataway.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- 集成 mybatis --
!-- dependency--
!-- groupIdorg.mybatis.spring.boot/groupId--
!-- artifactIdmybatis-spring-boot-starter/artifactId--
!-- version${mybatis.version}/version--
!-- /dependency--!-- mysql 驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependency!-- dataway 相关 --dependencygroupIdnet.hasor/groupIdartifactIdhasor-spring/artifactIdversion${dataway.version}/version/dependencydependencygroupIdnet.hasor/groupIdartifactIdhasor-dataway/artifactIdversion${dataway.version}/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.21/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project4.2、初始化脚本
打开数据库创建两个新的表用于维护 Dataway 的API,建表建议参考官方网站的因为不同版本的 Hasor 依赖的表的字段可能是不同的。 建表语句如下如果出现表问题可以参照官方网站修改
-- Dataway 中的API
CREATE TABLE interface_info (api_id varchar(64) NOT NULL COMMENT ID,api_method varchar(12) NOT NULL COMMENT HttpMethodGET、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)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENTDataway 中的API;-- 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 HttpMethodGET、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)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENTDataway API 发布历史。;
创建测试表以供测试
-- 人员表测试用
CREATE TABLE person (p_id int DEFAULT NULL,p_name varchar(100) DEFAULT NULL,p_phone varchar(11) DEFAULT NULL,p_score varchar(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb3 COMMENT人员表;-- 插入测试数据
INSERT INTO dataway.person (p_id,p_name,p_phone,p_score) VALUES(1,李阳,123456,7890),(2,张骞,123456,7890),(3,马康敬,123456,7890),(4,尚世宇,123456,7890),(5,赵题,123456,7890),(6,王澳,123456,7890),(7,张三,13611112222,100),(7,张三,13611112222,100),(7,张三,13611112222,100);测试数据
4.3、整合 SpringBoot
SpringBoot 整合 Hasor 中的 Dataway 主要是将数据也配置到 Hasor 中同时在启动入口开启 Hasor 和 Hasor-web。整合起来也是十分的简单。
package com.demo.config;import net.hasor.core.ApiBinder;
import net.hasor.core.DimModule;
import net.hasor.db.JdbcModule;
import net.hasor.db.Level;
import net.hasor.spring.SpringModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.sql.DataSource;/*** Classname DatawayModule* Description 将Hasor模块注入spring并注入数据源* Date 2023/7/28 11:43* Created by Leo825*/
DimModule // Hasor 中的标签表明是一个Hasor的model
Component // Spring 中的标签表明是一个组件
public class DatawayModule implements SpringModule {Autowiredprivate DataSource dataSource;Overridepublic void loadModule(ApiBinder apiBinder) throws Throwable {// .DataSource form Spring boot into HasorapiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));}
}
启动类配置如下
package com.demo;import net.hasor.spring.boot.EnableHasor;
import net.hasor.spring.boot.EnableHasorWeb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;EnableHasor // 在Spring 中启用 Hasor
EnableHasorWeb //将 hasor-web 配置到 Spring 环境中Dataway 的 UI 是通过 hasor-web 提供服务
SpringBootApplication(scanBasePackages { com.demo})
public class SpringbootDataWayApplication {public static void main(String[] args) {SpringApplication.run(SpringbootDataWayApplication.class, args);}
}application.yml 文件配置如下
# springboot多环境配置
#端口项目上下文
server:port: 8080servlet:context-path: /springboot-dataway# 全局服务编码设置encoding:charset: utf-8enabled: trueforce: true# mysql 连接信息配置
spring:# mysql 数据库连接信息本地使用 mysql 服务版本为8.0.28datasource:username: rootpassword: 6tojyh*A3eQ6url: jdbc:mysql://localhost:3306/dataway?useSSLfalseuseUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghairewriteBatchedStatementstrueallowPublicKeyRetrievaltruedriver-class-name: com.mysql.cj.jdbc.Driver# druid 数据连接池配置druid:initial-size: 3min-idle: 3max-active: 10max-wait: 6000# 配置druid监控页aop-patterns: com.demo.* #监控springBeanstat-view-servlet: # 配置监控页功能enabled: true # 默认开启这里显示说明login-username: admin # 登录名login-password: 6tojyh*A3eQ6 # 登录密码reset-enable: false # 禁用重置按钮web-stat-filter: # 监控 webenabled: trueurl-pattern: /* # 监控所有exclusions: *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* #放行filter:stat: # 对上面 filters 里的 stat 的详细配置slow-sql-millis: 1000 # 慢 sql 时间是毫秒单位的执行时间 1 秒以上的为慢 SQLlog-slow-sql: true # 日志记录enabled: truewall:enabled: trueconfig:drop-table-allow: false # 禁用删除表的 sql# mdataway 配置
# 是否启用 Dataway 功能必选默认false
HASOR_DATAQL_DATAWAY: true
# 开启 ui 管理功能注意生产环境必须要设置为 false否则会造成严重的生产安全事故
HASOR_DATAQL_DATAWAY_ADMIN: true
# dataway API工作路径可选默认/api/
HASOR_DATAQL_DATAWAY_API_URL: /api/
# dataway-ui 的工作路径可选默认/interface-ui/
HASOR_DATAQL_DATAWAY_UI_URL: /interface-ui/
# SQL执行器方言设置可选建议设置
HASOR_DATAQL_FX_PAGE_DIALECT: mysql# 日志输出配置
logging:level:root: INFOorg:springframework:security: WARNweb: ERROR# 设置自己的 com.demo.mapper 目录 输出sql日志com.demo.mapper: debugfile:path: ./logsname: ./logs/springboot-dataway.logpattern:file: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%nconsole: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n5、Dataway 接口管理 首先介绍一些 Dataway的基本知识Dataway 可以通过 UI 页面定义数据接口然后通过自测和冒烟以后才能发布这个接口当接口发布成功以后就可以通过我们定义的接口路径来访问获取数据了这些接口数据都是保存在我们上面创建的 interface_info 表中的当然接口发布以后也可以修改也即接口可以有历史版本这些信息保存在 interface_release 表中这也就是为什么我们什么要在上面定义这两个表Ps:当然 Dataway 也可以通过编写代码来实现在Dataway的数据访问中使用的是一种名字叫做 DataQL 的脚本语言类似 JavaScript 先来一段官网的说明定义: DataQLData Query LanguageDataQL 是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。 数据的存储根据其业务形式通常是较为简单的并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作这就是 DataQL 极力解决的问题。另外还支持使用SQL来但是 SQL 在 Dataway 中最终也都是转换成 DataQL。 Dataway页面说明 1、功能按钮可以查看所有已经发布的接口 2、功能按钮可以创建新的接口 3、链接打开 DataQL 接口说明 4、请求方式Http 请求方式定义默认是 POST 方法 5、接口路径定义接口的请求路径/interface/ 为配置文件中 HASOR_DATAQL_DATAWAY_API_URL 属性事先定义的值后面补充路径当接口路径发布后后面定义的接口请求路径不能重名 6、接口说明可以为接口添加中文说明 7、使用DataQL编写接口默认选择为 DataQL 8、使用 SQl 编写接口 9、接口编写代码部分 10、功能按钮保存9部分编写的代码注意只有先保存才能进行冒烟测试 11、功能按钮测试按钮当编写接口代码时使用此按钮进行接口测试 12、功能按钮冒烟测试按钮通过了冒烟测试以后才能发布 13、功能按钮发布接口发布接口以后以后就可以通过发布的接口获取数据 14、功能按钮接口编辑历史记录可以通过历史记录回滚9区域的代码 15、功能按钮删除按钮点击删除后删除已经发布的接口数据库中也会清除这条记录 16、18功能区域这个区域可以设置接口的请求参数例如通过 POST 方法传输一个请求报文在此区域定义 17、功能按钮设置接口的请求头参数 19、功能区域测试接口区域点击11测试按钮或者12冒烟以后在此区域显示测试结果
DataQL 语言写法
var dataSetFun sql(name) %select * from person where p_name #{name} limit 10;
%
// 执行这个 SQL并返回结果
return dataSetFun(${name});将 API 接口发布然后就可以测试 /springboot-dataway/api/queryByName 了
6、Mybatis 语法支持
// SQL 执行器切换为分页模式及首页页面设置
hint FRAGMENT_SQL_QUERY_BY_PAGE true
hint FRAGMENT_SQL_QUERY_BY_PAGE_NUMBER_OFFSET 1
hint FRAGMENT_SQL_PAGE_DIALECT mysql// 统一转驼峰
// 问题及说明2通过下边的查询SQL测试得出结论转驼峰的规则是全部字母小写下划线后的字母大写特别要注意的是【这里的驼峰只针对数据查询的字段分页字段默认是驼峰的下面附上测试】。
// default、upper、lower、hump
hint FRAGMENT_SQL_COLUMN_CASE hump // 定义查询SQL
// 问题及说明3对mybatis的支持并不完善支持的标签有select insert delete update if 和foreach相关where标签测试是不支持的。
// 问题及说明4Date类型数据的查询需要使用 TO_CHAR 函数否则是毫秒值。
var dataSetFun mybatis(keyword) %selectSELECTp_id,p_nameFROMpersonWHERE p_name is not nullif testkeyword ! null and keyword ! AND p_name like concat(%,${keyword},%) /ifORDER BY p_id/select
%// 创建分页查询对象
// 问题及说明5参数的传递规则顺序很重要从左到右是SQL内的参数顺序。
var pageQuery dataSetFun(${keyword},${pageSize},${pageNumber});
// 设置分页信息
run pageQuery.setPageInfo({pageSize : #{pageSize}, currentPage : #{pageNumber}
});
// 执行分页查询
var pageData pageQuery.data();
// 查询分页信息
var pageInfo pageQuery.pageInfo();
// 返回结果封装
// 问题及说明6结果会封装到之前的value内。
return {pageData : pageData,pageInfo : pageInfo
};测试结果
7、小结
总结一下个人觉得Hasor还是有很多优点的例如可以和方便的与SpringBoot结合可以不用写Controller、service、dao、mapper这一套东西可以动态修改配置API等等但是缺点也是有的个人觉得这东西还很年轻有一定的学习成本例如要学习DataQL等等这些。 DataQL 语言https://www.dataql.net/docs/dataql/overview