Datawayä»ç»
Dataway æ¯åºäº DataQL æå¡èåè½åï¼ä¸ºåºç¨æä¾çä¸ä¸ªæ¥å£é ç½®å·¥å ·ã使å¾ä½¿ç¨è æ éå¼åä»»ä½ä»£ç å°±é ç½®ä¸ä¸ªæ»¡è¶³éæ±çæ¥å£ãæ´ä¸ªæ¥å£é ç½®ãæµè¯ãåçãåå¸ãä¸ç«å¼é½éè¿ Dataway æä¾ç UI çé¢å®æãUI ä¼ä»¥ Jar å æ¹å¼æä¾å¹¶éæå°åºç¨ä¸å¹¶ååºç¨å ±äº«åä¸ä¸ª http 端å£ï¼åºç¨æ éåç¬ä¸º Dataway å¼è¾æ°ç管ç端å£ã
è¿ç§å åµéææ¹å¼æ¨¡å¼çä¼ç¹æ¯ï¼å¯ä»¥ä½¿å¾å¤§é¨åè项ç®é½å¯ä»¥å¨æ ä¾µå ¥çæ åµä¸ç´æ¥åºç¨ Datawayãè¿èæ¹è¿è项ç®çè¿ä»£æçï¼å¤§å¤§åå°ä¼ä¸é¡¹ç®ç åææ¬ã
Dataway å·¥å ·åçæä¾ DataQL é ç½®è½åãè¿ç§ç 忍¡å¼çåé©ä½¿å¾ï¼ç¸å½å¤çéæ±å¼ååºæ¯åªéè¦é ç½®å³å¯å®æäº¤ä»ãä»èé¿å äºä»æ°æ®ååå°å端æ¥å£ä¹é´çä¸ç³»åå¼åä»»å¡ï¼ä¾å¦ï¼MapperãBOãVOãDOãDAOãServiceãController ç»ç»ä¸å¨éè¦ã
Dataway æ¯ Hasor çæä¸çä¸åï¼å æ¤å¨  Spring ä¸ä½¿ç¨ Dataway é¦å è¦åçå°±æ¯æé两个çæãæ ¹æ®å®æ¹ææ¡£ä¸æ¨èçæ¹å¼æä»¬å° Hasor å Spring Boot æ´åèµ·æ¥ãè¿éæ¯åæï¼https://www.hasor.net/web/extends/spring/for_boot.html
ç¬¬ä¸æ¥ï¼å¼å ¥ç¸å ³ä¾èµ
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-spring</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-dataway</artifactId>
<version>4.1.6</version>
</dependency>
hasor-spring è´è´£ Spring å Hasor æ¡æ¶ä¹é´çæ´åãhasor-dataway æ¯å·¥ä½å¨ Hasor ä¹ä¸ï¼å©ç¨ hasor-spring æä»¬å°±å¯ä»¥ä½¿ç¨ datawayäºã
ç¬¬äºæ¥ï¼é ç½® Datawayï¼å¹¶åå§åæ°æ®è¡¨
dataway 伿ä¾ä¸ä¸ªçé¢è®©æä»¬é ç½®æ¥å£ï¼è¿ä¸ç¹ç±»ä¼¼ Swagger åªè¦jarå éæå°±å¯ä»¥å®ç°æ¥å£é ç½®ãæ¾å°æä»¬ springboot 项ç®çé ç½®æä»¶ application.properties
# æ¯å¦å¯ç¨ 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
Dataway ä¸å ±æ¶åå° 5个å¯ä»¥é ç½®çé 置项ï¼ä½ä¸æ¯ææé ç½®é½æ¯å¿ é¡»çã
å ¶ä¸ HASOR_DATAQL_DATAWAYãHASOR_DATAQL_DATAWAY_ADMIN 两个é ç½®æ¯å¿ é¡»è¦æå¼çï¼é»è®¤æ åµä¸ Datawaty æ¯ä¸å¯ç¨çã
Dataway éè¦ä¸¤ä¸ªæ°æ®è¡¨æè½å·¥ä½ï¼ä¸é¢æ¯è¿ä¸¤ä¸ªæ°æ®è¡¨çç®è¡¨è¯å¥ãä¸é¢è¿ä¸ª SQL å¯ä»¥å¨ datawayçä¾èµ jar å ä¸ âMETA-INF/hasor-framework/mysqlâ ç®å½ä¸é¢æ¾å°ï¼å»ºè¡¨è¯å¥æ¯ç¨ mysql è¯æ³åçã
å ¶å®æ°æ®åºç建表è¯å¥è¯·åç宿¹è¯´ææåï¼https://www.hasor.net/web/dataway/for_boot.html#mysql
CREATE TABLE `interface_info` (
`api_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`api_method` varchar(12) NOT NULL COMMENT 'HttpMethodï¼GETãPUTãPOST',
`api_path` varchar(512) NOT NULL COMMENT 'æ¦æªè·¯å¾',
`api_status` int(2) NOT NULL COMMENT 'ç¶æï¼0è稿ï¼1åå¸ï¼2æåæ´ï¼3ç¦ç¨',
`api_comment` varchar(255) NULL COMMENT '注é',
`api_type` varchar(24) NOT NULL COMMENT 'èæ¬ç±»åï¼SQLãDataQL',
`api_script` mediumtext NOT NULL COMMENT 'æ¥è¯¢èæ¬ï¼xxxxxxx',
`api_schema` mediumtext NULL COMMENT 'æ¥å£ç请æ±/ååºæ°æ®ç»æ',
`api_sample` mediumtext NULL COMMENT '请æ±/ååº/请æ±å¤´æ ·æ¬æ°æ®',
`api_option` mediumtext NULL COMMENT 'æ©å±é
置信æ¯',
`api_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´',
`api_gmt_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'ä¿®æ¹æ¶é´',
PRIMARY KEY (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway ä¸çAPI';
CREATE TABLE `interface_release` (
`pub_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Publish ID',
`pub_api_id` int(11) 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` int(2) NOT NULL COMMENT 'ç¶æï¼0ææï¼1æ æï¼å¯è½è¢«ä¸çº¿ï¼',
`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 NULL COMMENT 'æ¥å£ç请æ±/ååºæ°æ®ç»æ',
`pub_sample` mediumtext NULL COMMENT '请æ±/ååº/请æ±å¤´æ ·æ¬æ°æ®',
`pub_option` mediumtext NULL COMMENT 'æ©å±é
置信æ¯',
`pub_release_time`datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'å叿¶é´ï¼ä¸çº¿ä¸æ´æ°ï¼',
PRIMARY KEY (`pub_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API åå¸åå²ã';
create index idx_interface_release on interface_release (pub_api_id);
ç¬¬ä¸æ¥ï¼é ç½®æ°æ®æº
ä½ä¸º Spring Boot é¡¹ç®æçèªå·±å®åçæ°æ®åºæ¹é¢å·¥å ·æ¯æãæä»¬è¿æ¬¡éç¨ druid + mysql + spring-boot-starter-jdbc çæ¹å¼ã
é¦å å¼å ¥ä¾èµ
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
ç¶åå¢å æ°æ®æºçé ç½®
# db
spring.datasource.url=jdbc:mysql://xxxxxxx:3306/example
spring.datasource.username=xxxxx
spring.datasource.password=xxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type:com.alibaba.druid.pool.DruidDataSource
# druid
spring.datasource.druid.initial-size=3
spring.datasource.druid.min-idle=3
spring.datasource.druid.max-active=10
spring.datasource.druid.max-wait=60000
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=1
妿项ç®å·²ç»éæäºèªå·±çæ°æ®æºï¼é£ä¹å¯ä»¥å¿½ç¥ç¬¬ä¸æ¥ã
ç¬¬åæ¥ï¼ææ°æ®æºè®¾ç½®å° Hasor 容å¨ä¸
Spring Boot å Hasor æ¬æ¯ä¸¤ä¸ªç¬ç«ç容卿¡æ¶ï¼æä»¬åæ´åä¹å为äºä½¿ç¨ Dataway çè½åéè¦æ Spring ä¸çæ°æ®æºè®¾ç½®å° Hasor ä¸ã
é¦å æ°å»ºä¸ä¸ª Hasor ç æ¨¡åï¼å¹¶ä¸å°å ¶äº¤ç» Spring 管çãç¶åææ°æ®æºéè¿ Spring æ³¨å ¥è¿æ¥ã
@DimModule
@Component
public class ExampleModule implements SpringModule {
@Autowired
private DataSource dataSource = null;
@Override
public void loadModule(ApiBinder apiBinder) throws Throwable {
// .DataSource form Spring boot into Hasor
apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
}
}
Hasor å¯å¨çæ¶åä¼è°ç¨ loadModule æ¹æ³ï¼å¨è¿éåæ DataSource è®¾ç½®å° Hasor ä¸ã
ç¬¬äºæ¥ï¼å¨SprintBoot ä¸å¯ç¨ Hasor
@EnableHasor()
@EnableHasorWeb()
@SpringBootApplication(scanBasePackages = { "net.example.hasor" })
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
è¿ä¸æ¥é常ç®åï¼åªéè¦å¨ Spring å¯å¨ç±»ä¸å¢å 两个注解å³å¯ã
ç¬¬å æ¥ï¼å¯å¨åºç¨
åºç¨å¨å¯å¨è¿ç¨ä¸ä¼çå° Hasor Boot çæ¬¢è¿ä¿¡æ¯
_ _ ____ _
| | | | | _ | |
| |__| | __ _ ___ ___ _ __ | |_) | ___ ___ | |_
| __ |/ _` / __|/ _ | '__| | _ < / _ / _ | __|
| | | | (_| __ (_) | | | |_) | (_) | (_) | |_
|_| |_|__,_|___/___/|_| |____/ ___/ ___/ __|
å¨åé¢çæ¥å¿ä¸è¿å¯ä»¥çå°ç±»ä¼¼ä¸é¢è¿äºæ¥å¿ã
2020-04-14 13:52:59.696 [main] INFO n.h.core.context.TemplateAppContext - loadModule class net.hasor.dataway.config.DatawayModule
2020-04-14 13:52:59.697 [main] INFO n.hasor.dataway.config.DatawayModule - dataway api workAt /api/
2020-04-14 13:52:59.697 [main] INFO n.h.c.e.AbstractEnvironment - var -> HASOR_DATAQL_DATAWAY_API_URL = /api/.
2020-04-14 13:52:59.704 [main] INFO n.hasor.dataway.config.DatawayModule - dataway admin workAt /interface-ui/
2020-04-14 13:52:59.716 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[901d38f22faa419a8593bb349905ed0e] -> bindType âclass net.hasor.dataway.web.ApiDetailControllerâ mappingTo: â[/interface-ui/api/api-detail]â.
2020-04-14 13:52:59.716 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[c6eb9f3b3d4c4c8d8a4f807435538172] -> bindType âclass net.hasor.dataway.web.ApiHistoryListControllerâ mappingTo: â[/interface-ui/api/api-history]â.
2020-04-14 13:52:59.717 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[eb841dc72ad54023957233ef602c4327] -> bindType âclass net.hasor.dataway.web.ApiInfoControllerâ mappingTo: â[/interface-ui/api/api-info]â.
2020-04-14 13:52:59.717 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[96aebb46265245459ae21d558e530921] -> bindType âclass net.hasor.dataway.web.ApiListControllerâ mappingTo: â[/interface-ui/api/api-list]â.
2020-04-14 13:52:59.718 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[7467c07f160244df8f228321f6262d3d] -> bindType âclass net.hasor.dataway.web.ApiHistoryGetControllerâ mappingTo: â[/interface-ui/api/get-history]â.
2020-04-14 13:52:59.719 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[97d8da5363c741ba99d87c073a344412] -> bindType âclass net.hasor.dataway.web.DisableControllerâ mappingTo: â[/interface-ui/api/disable]â.
2020-04-14 13:52:59.720 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[8ddc3316ef2642dfa4395ca8ac0fff04] -> bindType âclass net.hasor.dataway.web.SmokeControllerâ mappingTo: â[/interface-ui/api/smoke]â.
2020-04-14 13:52:59.720 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[cc06c5fb343b471aacedc58fb2fe7bf8] -> bindType âclass net.hasor.dataway.web.SaveApiControllerâ mappingTo: â[/interface-ui/api/save-api]â.
2020-04-14 13:52:59.720 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[7915b2b1f89a4e73891edab0264c9bd4] -> bindType âclass net.hasor.dataway.web.PublishControllerâ mappingTo: â[/interface-ui/api/publish]â.
2020-04-14 13:52:59.721 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[0cfa34586455414591bdc389bff23ccb] -> bindType âclass net.hasor.dataway.web.PerformControllerâ mappingTo: â[/interface-ui/api/perform]â.
2020-04-14 13:52:59.721 [main] INFO net.hasor.core.binder.ApiBinderWrap - mapingTo[37fe4af3e2994acb8deb72d21f02217c] -> bindType âclass net.hasor.dataway.web.DeleteControllerâ mappingTo: â[/interface-ui/api/delete]â.
å½çå° âdataway api workAt /api/â ã dataway admin workAt /interface-ui/ ä¿¡æ¯æ¶ï¼å°±å¯ä»¥ç¡®å® Dataway çé 置已ç»çæäºã
ç¬¬ä¸æ¥ï¼è®¿é®æ¥å£ç®¡ç页é¢è¿è¡æ¥å£é ç½®
卿µè§å¨ä¸è¾å ¥ âhttp://127.0.0.1:8080/interface-ui/â å°±å¯ä»¥çå°æå¾ å·²ä¹ ççé¢äºã

ç¬¬å «æ¥ï¼æ°å»ºä¸ä¸ªæ¥å£
Dataway æä¾äº2ä¸è¯è¨æ¨¡å¼ï¼æä»¬å¯ä»¥ä½¿ç¨å¼ºå¤§ç DataQL æ¥è¯¢è¯è¨ï¼ä¹å¯ä»¥ç´æ¥ä½¿ç¨ SQL è¯è¨ï¼å¨ Dataway å é¨ SQL è¯è¨ä¹ä¼è¢«è½¬æ¢ä¸º DataQL ç形弿§è¡ãï¼
é¦å æä»¬å¨ SQL 模å¼ä¸å°è¯æ§è¡ä¸æ¡ select æ¥è¯¢ï¼ç«å»å°±å¯ä»¥çå°è¿æ¡ SQL çæ¥è¯¢ç»æã
åæ ·çæ¹å¼æä»¬ä½¿ç¨ DataQL çæ¹å¼éè¦è¿æ ·åï¼
var query = @@sql()<%
select * from interface_info
%>
return query()
å ¶ä¸ var query = @@sql()<% ... %> æ¯ç¨æ¥å®ä¹SQLå¤é¨ä»£ç åï¼å¹¶å°è¿ä¸ªå®ä¹åå ¥ query åéåä¸ã<% %> ä¸é´çå°±æ¯ SQL è¯å¥ã
æåå¨ DataQL ä¸è°ç¨è¿ä¸ªä»£ç åï¼å¹¶è¿åæ¥è¯¢ç»æã
彿¥å£å好ä¹åå°±å¯ä»¥ä¿ååå¸äºï¼ä¸ºäºæµè¯æ¹ä¾¿ï¼æéç¨ GET æ¹å¼ã