【talend】Talend ESB RESTful操作--数据库

一、作业预览实现:从Mysql数据库中:

 1、获取店铺列表

2、输入店铺ID,返回该店铺信息

 

二、作业设计

1、创建作业:进入Talend ESB,选中作业设计=》右键 创建作业=》输入新作业名称

2、连接数据库:在右边查找组件 tDBConnection,配置数据库连接信息,包轮主机、端口号、数据库、用户名、密码。下图配置信息已在上下文中填写。

 3、定义REST Request:在右边查找组件 tRESTRequest,

 3.1 getShopList

①查找tDBRow组件,配置组件:

基本设置:

  • 使用一个现有连接
  • 表名:填写查询表,shop_grade_portrait
  • 查询:sql Query
select shop_code,shop_name from shop_grade_portrait
  • 编辑schema:添加列shop_code,shop_name(查询列),类型为String;添加列shopList(作为查询结果集),类型为Object

高级设置:

  • 传播QUERY的记录集,使用列:选择shopList

 4、连接tRESTRequest和tDBRow

从tRESTRequest组件右击不放,会有根线拉出来,把它拉到tDBRow组件上,此时会弹出一个输入框,输入新输出的名字getShopList,输入完成后,可以在tRESTRequest组件的输出流中看到,并更改:

HTTP谓词:GET

URI模式:/getShopList

生成:JSON

此时点击输出流,可以看到后面三个...,点击后可以看到 在tDBRow中添加的schema

3.2 getShop

①查找tXMLMap组件

②查找tDBRow组件,配置组件:

基本设置:

  • 使用一个现有连接
  • 表名:填写查询表,shop_grade_portrait
  • 查询:sql Query
select shop_code,shop_name,shop_address,shop_province,shop_city,shop_sales,create_time,year,gdp,population,score,grade from shop_grade_portrait where shop_code=?
  • 编辑schema:添加列shop_code,shop_name,shop_address,shop_province,shop_city,shop_sales,create_time,year,gdp,population,score,grade(查询列),选择对应类型;添加列shopSet(作为查询结果集),类型为Object

 高级设置:

  • 传播QUERY的记录集,使用列:选择shopSet
  • 使用PreparedStatement,并添加PreparedStatement参数:参数索引:1;参数值:getShopInput.shop_code(getShopInput为tXMLMap与tDBRow之间的连线)

③连接tRESTRequest和tXMLMap和tDBRow

从tRESTRequest组件右击不放,会有根线拉出来,把它拉到tXMLMap组件上,此时会弹出一个输入框,输入新输出的名字getShop,输入完成后,可以在tRESTRequest组件的输出流中看到,并更改:

HTTP谓词:GET

URI模式:/{shop_code}/

生成:JSON

此时点击输入流getShop,后面出现...,点击后添加列shop_code

 从tXMLMap组件右击不放,会有根线拉出来,把它拉到tDBRow组件上,此时也会弹出一个输入框,输入新输出的名字getShopInput,输入完成后,点击tXMLMap,Map编辑器,可以在左边看到main.getShop和右边getShopInput,点击左边shop_code,按住不放,将鼠标移动到右边shop_code那行

此时会形成一条映射线 ,点击ok

目前作业设计如下图所示

 5、解析结果集(后续操作以getShop为例,同理可以操作getShopList)

查询tParseRecordSet组件,将tDBRow与tParseRecordSet组件连接,点击tParseRecordSet组件:

更改上一组件列列表为shopSet

同步列,编辑schema,将shopSet删除掉

 6、打印log

查找tLogRow组件,模式更改为表,将tParseRecordSet与tLogRow连起来

 

7、结果映射body

查询tXMLMap组件,将tLogRow与tXMLMap连接起来

 8、获取HTTP Response

查询tRESTResponse组件,将tXMLMap与tRESTResponse组件连接起来,此时会弹出一个输入框,输入新输出的名字getShopOutput,输入完成后,点击tXMLMap组件,Map编辑器,左边是查询结果,右边是为Document类型的body

右击 root,Create Sub-Element,输入shop

 可以看到root下面多了一个shop属性,同理在shop下创建12个属性

  • shop_code
  • shop_name
  • shop_address
  • shop_province
  • shop_city
  • shop_sales
  • create_time
  • year
  • gdp
  • population
  • score
  • grade

将左边的column和右边的属性进行一一映射,按住左边的column,拖到右边对应位置,点击shop,邮件右键 As loop element

 loop的标志会有root移动到shop上

 9、添加其他处理

当传入shop_code值在数据库中查找不到时,返回结果为空白,如果想要返回“No Rows”提示,需要添加这三个组件:tFixedFlowInput、tXMLMap以及tRESTResponse ,并将他们连接起来,在tXMLMap与tRESTResponse组件连接时,需要输入新输出名称getShopNoRows

9.1tFixedFlowInput

 编辑sechema,添加一列为message,此时值中出现message列,在值中填写No Rows

9.2tXMLMap

点击Map编辑器,在右边root下创建新子元素message,将左边的message映射到右边的message

9.3tRESTResponse 

9.4将tParseRecordSet与tFixedFlowInput连接起来:点击tParseRecordSet组件,选择触发器,run if,然后将线拉到tFixedFlowInput,然后可以看到两个组件之间线上有 if,点击if,下面出现条件,输入if条件

(!((String)globalMap.get("tRESTRequest_1_URI")).equals("getShopList"))&&
((Integer)globalMap.get("tParseRecordSet_1_NB_LINE") == 0)

 

可以获取那些全局变量:在左下角Outline中展开对应的组件,可以看到URI和HTTP_METHOD,这些全局变量前要加上该组件的名字如tRESTRequest_1或tDBRow_2等

 

 10、将tDBConnection与tRESTRequest连接起来

右击tDBConnection,选择触发器,组件正常时,并将线连到tRESTRequest,会生成一条线,上面写有OnComponentOk,此时整个作业已经完成,保存作业

 

 

 三、测试

 使用postman进行测试

点击运行,没有报错的话,可以看到作业上每条线上都能看到Starting

 

getShopList,选择GET 方法,在链接中输入http://localhost:8089/shop/getShopList

 getShop,当shop_code在数据库中能查到时,会返回信息,若查找不到返回 No Rows

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某可儿同学的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值