一、作业预览实现:从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