一、 dataWay介绍
- 这种模式的革新使得开发一个接口不必在编写任何形式的代码,只需要配置一条 DataQL 查询即可完成满足前端对接口的需求。 从而避免了从数据库到前端之间一系列的开发配置任务,例如:Mapper、DO、DAO、Service、Controller 统统不在需要。
二、工程搭建
工程依赖:
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-spring</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-dataway</artifactId>
<version>4.2.1</version>
</dependency>
配置文件:
是否启用 Dataway 功能(必选:默认false)
HASOR_DATAQL_DATAWAY: true
是否开启 Dataway 后台管理界面(必选:默认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
界面介绍:
三、语法介绍
DataQL语法
1.基础语法
// 声明一个 SQL
使用daiteQL语法包裹sql语句,防止sql注入
var dataSet = @@sql(itemCode) <%
select * from category where co_code = #{itemCode} limit 10;
%>
// 执行这个 SQL,并返回结果
return dataSet(${itemCode});
完全继承@@sql功能兼容mybatis部分标签实现动态sql
var dimSQL = @@mybatis(userName)<%
<select>
select * from user_info where `name` like concat('%',#{userName},'%') order by id asc
</select>
%>;
目前版本只支持 标签
2. 在var上面设置全局变量可以设置不同的效果
//定义分页 使当前执行的语句支持分页不需要在使用mysql的原始分页,如果使用原始分页需要单独执行一条count()来获取总条数
hint FRAGMENT_SQL_QUERY_BY_PAGE=true
var dataSet = @@sql(itemCode) <%
select * from category where co_code = #{itemCode} limit 10;
%>;
// 执行这个 SQL,并返回结果
return dataSet(${itemCode});
var pageQuery = dimSQL(itemCode);
// 设置分页信息
run pageQuery.setPageInfo({
"pageSize" : ${pageSize}, // 页大小
"currentPage" : ${pageNo} // 第几页
});
return {
"pageData": pageQuery.data(),
"pageInfo": pageQuery.pageInfo()
}
这个分页的参数会存储到执行参数的返回变量中 var定义的参数
Data存储数据
PageInfo存储分页信息
这个分页的起始页数 是从0开始的,如果想让他从1开始的话可以在分页的开启的下一句加上
hint FRAGMENT_SQL_QUERY_BY_PAGE_NUMBER_OFFSET = 1
设置当前页码的偏移量+1
// 统一转驼峰
hint FRAGMENT_SQL_COLUMN_CASE=“hump”
选项值 默认 含义
default 是 全部列名保持大小写敏感,数据库什么样返回就什么样。
upper 全部列名保持大写,如果在转换过程中发生冲突,那么会产生覆盖问题。
lower 全部列名保持小写,如果在转换过程中发生冲突,那么会产生覆盖问题。
hump 全部列名做一次驼峰转换。如:goods_id => goodsId、GOODS_id => goodsId。
//关闭拆包
hint FRAGMENT_SQL_OPEN_PACKAGE = “off”
选项值 默认 含义
off 返回值不拆开,无论返回数据,都以 List/Map 形式返回。
row 返回值拆分到行,如果返回值是多条记录那么行为和 off 相同。
当返回 0 或 1 条记录时,自动解开最外层的 List,返回一个 Object。
column 是 最小粒度到列。当返回结果只有一行一列数据时。只返回具体值。
例如: select count(*) 返回 int 类型
官方文档:
https://www.hasor.net/doc/pages/viewpage.action?pageId=1573208