sCloud 开发手册
-
Sql 代码
1 |
<dynamic> |
|
2 |
select city_name , city_en_name , country_code |
3 |
from city_t t |
|
4 |
where 1 = 1 |
5 |
and t.city_en_name = # city_en_name,varchar # |
|
6 |
and t.city_name = # city_name,varchar # |
7 |
</dynamic> |
一、服务配置
1、 ActionList 配置
ActionList 为一组处理逻辑的集合。一个 ActionList 中可以包含一个或多个Action, Actionlist 就是HAE sCloud 的服务。每个Action定义了一个处理逻辑单元,比如向数据库插入数据、调用存储过程、循环逻辑处理。
属性配置:
2、创建类型Action
使用Insert语句做数据插入操作的Action
-
Java 代码
01 |
INSERT INTO TRAINING01_T ( |
|
02 |
ATTR0, |
03 |
ATTR1, |
04 |
ATTR2, |
05 |
CREATED_BY, |
|
06 |
CREATED_DATE, |
07 |
LAST_UPDATED_BY, |
|
08 |
LAST_UPDATED_DATE |
09 |
)VALUES( |
|
10 |
# hae_guid,VARCHAR #, |
11 |
#attr1, VARCHAR#, |
12 |
#attr2, VARCHAR#, |
13 |
# created_by,VARCHAR #, |
|
14 |
sysdate , |
15 |
# last_updated_by,VARCHAR #, |
|
16 |
sysdate |
17 |
) |
3、删除类型Action
使用Delete语句做数据删除操作的Action。
-
Sql 代码
1 |
DELETE FROM TRAINING01_T |
|
2 |
WHERE ATTR0 = #attr0,VARCHAR# |
4、修改类型Action
使用Update语句做数据修改操作的Action。
-
Sql 代码
01 |
UPDATE TRAINING01_T |
|
02 |
SET ATTR1 = #attr1,VARCHAR#, |
03 |
SET ATTR2 = #attr2,VARCHAR#, |
04 |
WHERE ATTR0 = #attr0,VARCHAR# |
05 |
|
|
06 |
BO{ |
07 |
"attr0":"e7a6a9d169a54ca6a5e5345a67a59c37" |
|
08 |
"attr1":" JavaScirpt " |
09 |
"attr2":"JavaScirpt权威指南" |
|
10 |
} |
5、查询类型Action
使用Select语句做数据查询操作的Action。
典型案例
示例1:根据(ATTR1、ATTR2、CREATED_BY、LAST_UPDATED_BY)这几个字段,来查询TRAINING01_T表中的符合条件记录。
查询SQL语句:
-
Sql 代码
01 |
SELECT |
02 |
ATTR0, |
03 |
ATTR1, |
04 |
ATTR2, |
05 |
CREATED_BY, |
|
06 |
VARCHAR_FORMAT(CREATED_DATE,'YYYY-MM-DD HH24:MI:SS') AS CREATED_DATE, |
07 |
LAST_UPDATED_BY, |
|
08 |
VARCHAR_FORMAT(LAST_UPDATED_DATE,'YYYY-MM-DD HH24:MI:SS') AS LAST_UPDATED_DATE |
09 |
FROM TRAINING01_T |
|
10 |
WHERE ATTR1=#attr1,VARCHAR# |
分页SQL语句:
-
Sql 代码
1 |
SELECT COUNT (*) AS total_record |
|
2 |
FROM TRAINING01_T |
3 |
WHERE ATTR1=#attr1,VARCHAR# |
注意:
分 页数据 总条数别名必须命名为 total_record .否则HAE框架不识别。
查询返回的结果,列名都为小写。
6、存储过程类型Action
调用“存储过程”操作数据库的Action。
典型案例
示例1:调用存储过程 create_proc ,输入参数为id,输出为result。
-
Sql 代码
1 |
create_proc (# IN:id,varchar #,# OUT:result,varchar #) |
7、引用类型Action
用于引用本应用下的其他 ActionList 服务,系统将被引用的 ActionList 嵌入到当前 ActionList 中作为一个Action节点。
8、服务类型Action
调用其他应用对外暴露的服务的Action,被调用的服务必须是基于“SAAS服务开发规范”的服务,如栏目服务、权限服务、 ActionLIst 服务等。应用对外暴露服务的 ActionList ,引用控制必须为public。
9、Bean类型Action
调用指定JavaBean的Action,JavaBean必须要实现 com.huawei.it.common.framework.action.ActionBeanInterface 接口,用户可以在JavaBean中实现各种逻辑。
-
Java 代码
01 |
package com.huawei.it.hae.haesmpservice.swx297630; |
|
02 |
|
03 |
import java.util.ArrayList ; |
|
04 |
import java.util.HashMap ; |
05 |
import java.util.List ; |
|
06 |
import java.util.Map ; |
07 |
import org.apache.log4j.Logger; |
|
08 |
import com.huawei.it.common.exception.ApplicationException ; |
09 |
import com.huawei.it.common.framework.action.ActionBeanInterface; |
|
10 |
import com.huawei.it.common.framework.service.action.mapping.InOutputELParser; |
11 |
|
|
12 |
/** |
13 |
* Function: 演示JavaBean使用Demo,功能为输入id参数,并返回输入参数id。 |
|
14 |
* |
15 |
* @author sWX297630 |
|
16 |
*/ |
17 |
public class DemoBean implements ActionBeanInterface { |
|
18 |
private static final Logger logger = Logger.getLogger ( DemoBean.class ); |
19 |
/* (non- Javadoc ) |
||
20 |
* @see com.huawei.it.common.framework.action.ActionBeanInterface#execute(java.util.Map, java.util.Map ) |
21 |
*/ |
|
22 |
@Override |
23 |
public List execute(Map actionMap , Map runtimeMap )throws ApplicationException { |
|
24 |
List resultList = new ArrayList (); |
25 |
logger.debug (" actionMap = " + actionMap ); |
|
26 |
logger.debug (" runtimeMap = " + runtimeMap ); |
27 |
|
|
28 |
//获取BO输入参数(测试时要输入id参数) |
29 |
Map boMap =(Map)runtimeMap.get(InOutputELParser.getInOutputKey((String)actionMap.get("input"))); |
||
30 |
String id = boMap.get ("id"). toString (); |
31 |
Map result = new HashMap (); |
|
32 |
result.put ("id", id); |
33 |
//设置返回数据 |
|
34 |
resultList.add (result); |
35 |
return resultList ; |
|
36 |
} |
37 |
} |
10、JMS类型Action
调用Java消息服务的Action。JMS(Java Message Server)即:Java消息服务。
典型案例
应用场景:日志记录,邮件发送,通知服务等待。另外,服务超时时间不要大于90000ms,若 大于大于 90000ms时建议使用异步MDB消息处理,即使用JMS消息。
11、校验类型Action
处理各种校验逻辑的Action。如果执行条件校验通过返回true,否则抛出异常。
12、路由类型Action
通过配置不同的执行条件,执行不同的Action。用路由进行条件判断会使 ActionList 运行路径更加清晰;若通过Action中的执行条件来判断Action是否执行,产生的 ActionList 执行路径会形成很多孤立的点,运行路径不够清晰。
13、循环类型Action
处理循环逻辑的Action。
14、事务分组Action
事务分组是将事务开始与事务结束内的Action单独事务处理。
二、SQL语句编写
1、单条件
-
Sql 代码
1 |
<if exp =" key.XXXX,equals , ddd,String " prepend="and" bracket="true"> sql </if> |
案例:
示例1:当 city_code 不为空时,该语句执行条件加and t.city_code = # city_code ,varchar #
-
Sql 代码
1 |
select city_code , city_name , city_en_name , country_code |
|
2 |
from city_t t |
3 |
where 1 = 1 |
|
4 |
<if exp="key.city_code,!=,null,String" prepend="and" bracket="false"> |
5 |
t.city_code = # city_code,varchar # |
|
6 |
</if> |
测试报文
-
Sql 代码
1 |
BO{ |
|
2 |
"city_code":" beijing " |
3 |
} |
2、多条件
-
Sql 代码
1 |
<if exp ="( !( key. XXXX1, != , null,string ) || (key. XXXX2 ,equals,key.ancd1,string )) && (key. XXXX3,!=, null,string )" prepend="and" bracket="false"> sql </if> |
|
2 |
支持复合条件: “!”,“||”,“&&”(注:&要用转义符&) |
案例:
示例1:当 city_code 不为空时并且不等于 shenzhen ,该语句执行条件加and t.city_code = # city_code ,varchar #
-
Sql 代码
1 |
select city_code , city_name , city_en_name , country_code |
|
2 |
from city_t t |
3 |
where 1 = 1 |
||
4 |
<if exp="(key.city_code,!=,null,string)&&(key.city_code,!=,shenzhen,string)" prepend="and" bracket="false"> |
5 |
t.city_code = # city_code,varchar # |
|
6 |
</if> |
3、循环条件
-
Sql 代码
1 |
in< while exp ="key. XXXX,string " split="," bracket="true" sqlsplit =","> sql </while> |
|
2 |
循环生成 sql ,可以用于in,or,and等 |
案例:
示例1:查询 city_code in beijing,shanghai 的数据。
-
Sql 代码
1 |
select city_code , city_name , city_en_name , country_code |
|
2 |
from city_t t |
3 |
where 1 = 1 |
||
4 |
<if exp="(key.city_code,!=,null,string)&&(key.city_code,!=,,string)" |
5 |
bracket="false" prepend="and" > |
|
6 |
city_code in <while exp="key.city_code,string" split="," bracket="true" sqlsplit=","> |
7 |
# city_code,varchar #</while> |
|
8 |
</if> |
4、嵌套条件
-
Sql 代码
1 |
" key.key.key.XXXX " |
|
2 |
参数中,如果包含Map/List嵌套,支持嵌套引用。 |
案例:
示例1:当 city_code 不为空时,该语句执行条件加and t.city_code = # city_code ,varchar #
-
Sql 代码
1 |
Select * |
|
2 |
from tab1 |
3 |
where 1 = 1 |
|
4 |
And id = #m.id, varchar # |
5 |
And id2 = #m.m2.id2, varchar # |
|
6 |
And value = # m.values 0.vid, varchar # |
测试报文:
-
Sql 代码
1 |
"BO":{ |
|
2 |
"m":{ |
3 |
"id":"22", |
|
4 |
"m2":{"id2":"33"}, |
5 |
"values":[{"vid":"44"},{"vid":"55"}] |
|
6 |
} |
7 |
} |
5、动态条件
-
Sql 代码
1 |
<dynamic> sql </dynamic> |
|
2 |
根据输入参数动态截取 sql 。不支持复杂 sql ,如 sql 嵌套,有括弧的。 |
案例:
示例1:当 city_code 不为空时,该语句执行条件加and t.city_code = # city_code ,varchar #
-
Sql 代码
1 |
<dynamic> |
|
2 |
select city_name , city_en_name , country_code |
3 |
from city_t t |
|
4 |
where 1 = 1 |
5 |
and t.city_en_name = # city_en_name,varchar # |
|
6 |
and t.city_name = # city_name,varchar # |
7 |
</dynamic> |
该动态SQL语句相当于如下条件SQL语句:
-
Sql 代码
1 |
select city_name , city_en_name , country_code |
|
2 |
from city_t t |
3 |
where 1 = 1 |
||
4 |
<if exp="key.city_en_code,!=,null,string" prepend="and" bracket="false"> |
5 |
t.city_en_name = # city_en_name,varchar # |
|
6 |
</if> |
7 |
<if exp="key.city_name,!=,null,string" prepend="and" bracket="false"> |
|
8 |
t.city_name = # city_name,varchar # |
9 |
</if> |
- 点赞
- 收藏
- 关注作者
评论(0)