sCloud 开发手册

举报
斌哥来了 发表于 2021/07/26 20:33:54 2021/07/26
【摘要】 - Sql 代码 1<dynamic>2select  city_name , city_en_name , country_code3  from  city_t t4 where 1 = 15and  t.city_en_name = # city_en_name,varchar # 6and  t.city_name = # city_name,varchar # 7</dynam...

-

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

支持复合条件: “!”,“||”,“&&”(注:&要用转义符&amp;)



案例:
示例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)&amp;&amp;(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)&amp;&amp;(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>


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。