知行之桥 EDI 系统功能介绍—— Mysql端口配置文档Select篇
© All rights reserved. • 西安知行软件有限公司 • 陕ICP备09022277号
知行之桥 MySQL端口-Select配置文档
一、功能背景
MySQL 端口中的 Select 操作用于从 MySQL 数据库中查询数据,并将查询结果输出为 XML 消息,供工作流下游端口(如 XML Map、EDI、File 等)进一步处理。
典型使用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 定时拉取待处理业务数据 | 按固定频率查询符合条件的新增或待处理记录 | 每5分钟查询一次 status = 0 的订单 |
| 条件过滤后输出 | 根据业务状态、时间范围等条件筛选数据并输出为 XML | 查询当天创建的客户信息 |
| 读取后自动更新状态 | 成功提取记录后更新状态位,防止重复处理 | 查询后将 status 从 0 改为 1 |
与 Upsert / Lookup / 存储过程类操作的分工
| 操作 | 方向 | 作用 |
|---|---|---|
| Select(本文) | 数据库 → 工作流 | 从数据库中 读取 数据,输出 XML 消息 |
| Upsert | 工作流 → 数据库 | 将传入的 XML 消息内容 写入 数据库(插入或更新) |
| Lookup | 工作流 → 数据库 → 工作流 | 根据传入消息中的字段值,查询 数据库并补充字段到消息中 |
| Lookup 存储过程 | 工作流 → 数据库 → 工作流 | 根据当前消息中的字段值调用存储过程,并将结果补充回当前消息 |
| 执行存储过程 | 工作流 → 数据库 → 工作流 | 执行数据库存储过程,由存储过程完成查询、更新或业务处理逻辑 |
关于
Upsert和Lookup的详细配置,请参考对应的专项文档。
二、建立连接
使用 MySQL 端口前,需要先创建 MySQL 连接。连接创建后可以被多个 MySQL 端口复用。
2.1 添加 MySQL 端口
进入工作流页面,鼠标右键选择“添加端口”,搜索并选择 MySQL,填写端口 ID,创建Mysql端口。

2.2 创建连接
进入 MySQL 端口的设置页面,在“连接” 下拉框旁点击“添加新连接”。
也可以从全局入口创建:
系统设置 > 连接 > 添加连接 > MySQL

2.3 填写连接信息
| 配置项 | 说明 | 示例 |
|---|---|---|
| 连接名称 | 连接名称 | MySQL1 |
| Server | MySQL 服务器地址 | 192.168.0.0 |
| Port | MySQL 端口 | 3306 |
| Database | 数据库名 | test |
| User | 用户名 | user |
| Password | 密码 | 123456 |
填写完成后点击右上角的 添加并测试,如果连接有问题,则会在右下角报错,反之如果连接成功,则会跳转回设置界面。

三、Select:从 MySQL 查询数据
Select 用于从 MySQL 中查询记录,并将查询结果输出为 XML。它通常放在工作流开头。
3.1 适用场景
| 场景 | 示例 |
|---|---|
| 查询待处理订单 | 查询 status = 0 的订单 |
| 查询主数据 | 查询客户、物料、供应商信息 |
| 定时拉取数据 | 每 5 分钟从数据库取一次新增记录 |
3.2 基本配置步骤
本文示例以订单主表(test_order_header) 和订单明细表(test_order_item) 为例,演示如何通过 Select 同时查询主表和明细表,并输出为嵌套 XML。
查询目标:
| 需求 | 说明 |
|---|---|
| 查询条件 | 只查询 header 表中 status = 0(待处理)的订单 |
| 关联关系 | item 表的 header_id 必须等于 header 表的 id,即明细行只属于当前订单 |
| 处理后动作 | 查询完成后,将 header 表的 status 更新为 1,避免下次重复拉取 |
最终输出的 XML 结构为:一个订单头下挂载其对应的所有订单明细行。
基本配置步骤:
- 打开 MySQL 端口。
- 在设置界面选择已创建的 MySQL 连接或者创建新连接。

- 进入Action界面,操作选择 Select,然后点击 添加表结构。

- 选择结构类型:
父表和子表,或联接表,本次示例选择父表和子表。
| 结构类型 | 说明 | 适用场景 |
|---|---|---|
| 父表和子表 | 按父子层级查询,输出嵌套 XML | 订单头 + 订单明细 |
| 联接表 | 使用 JOIN 合并多个表,输出一个结果结构 | 报表类、扁平结构输出 |

5. 选择你要select的表,先选择父表(test_order_header),然后在右侧点击添加子项表,勾选子表(test_order_item)。

添加完成后,点击右下角应用,返回端口主界面,此时就能看到已选中的父表和子表结构了。

6. 添加主表过滤条件。
将鼠标悬浮在要添加条件的表名上,点击表选项

选择表设置,进入编辑界面

点击过滤器,选择添加过滤器

本示例要查询 status = 0 的数据,按下图配置过滤条件:

配置完成后点击 应用。
- 添加子表过滤条件
子表(
test_order_item)需要通过header_id字段关联到父表(test_order_header)的id字段,以确保每个子表记录只属于其对应的父表记录。如下图所示,添加过滤器,先在左边下拉框选择子表的
header_id列,然后在最右边选择REF,中间的运算符选择相等,最后在运算符右边栏位选择父表的id列。
配置说明:上述配置生成的 SQL 关联条件等价于
test_order_item.header_id = test_order_header.id。选择REF而非CONST(常量值),是因为header_id需要动态匹配每条父表记录的id,而非固定值。 - 代码视图和预览数据
点击来源处的蓝色表名
test_order_header,即可重新进入添加表结构界面

点击右上角的代码视图,则可以查看当前配置完成的select代码
点击右上角的预览XML,则可以预览select查询的结果

- 读取后更新表状态
在添加表结构界面,勾选更新复选框,选择列
status,填写值为1。这样查询完成后,test_order_header表中被查到的记录会自动将status更新为1。该更新发生在 MySQL Select 成功提取记录时,不代表下游端口已全部处理成功。

本示例仅更新父表状态位,子表状态如需同步更新,需要单独在代码视图处进行设置。
- 全部配置完成后,点击右上角的保存按钮,然后在事务界面,点击接收文件 即可读取订单数据。
3.3 结构类型
Select 支持两种常见结构类型。
| 结构类型 | 说明 | 适用场景 |
|---|---|---|
| 父表和子表 | 按父子层级查询,输出嵌套 XML | 订单头 + 订单明细 |
| 联接表 | 使用 JOIN 合并多个表,输出一个结果结构 | 报表类、扁平结构输出 |
3.4 当前 TEST_MySQL 的 父表和子表 Select 示例
当前 TEST_MySQL 端口中的 Select 代码 模板如下图:

重点说明:
| 配置 | 作用 |
|---|---|
WHERE status = '0' |
只查询待处理订单 |
WHERE header_id = ${id} |
子表按父表 id 查询明细 |
status updateValue="1" |
MySQL端口查询并处理该行时将状态更新为1 |
输出 XML 示例:
<Items>
<test_order_header>
<id>1</id>
<buyerNo>BUYER001</buyerNo>
<poNo>PO20260827001</poNo>
<status>0</status>
<test_order_item>
<id>10</id>
<header_id>1</header_id>
<poLineNo>1</poLineNo>
<quantity>100</quantity>
</test_order_item>
</test_order_header>
</Items>
四、自动化与测试
Select 端口配置完成后,可以通过手动接收进行测试,也可以在“自动化”页面设置定时查询数据库。
4.1 手动测试 Select
第一次配置完成后,建议先手动测试,不要马上开启自动化。
操作步骤:
- 确认 MySQL 连接测试成功。
- 确认 Select 表结构、父子表关系和过滤条件已保存。
- 进入端口的事务页面。
- 点击右上角的接收文件。
- 查看事务列表中是否生成新的输出记录。
- 点击输出文件,检查生成的 XML 内容是否符合预期。
如果输出成功,说明 MySQL 端口已经可以按当前 Select 配置从数据库读取数据。
4.2 查看输出 XML
Select 成功后,MySQL 端口会将查询结果输出为 XML。对于父表和子表结构,输出通常是嵌套结构。
示例:
<Items>
<test_order_header>
<id>1</id>
<buyerNo>B01</buyerNo>
<currency>USD</currency>
<poDate>2026-08-25T11:36:05.0000+08:00</poDate>
<poNo>PO001</poNo>
<status>0</status>
<test_order_item>
<id>2</id>
<buyerItemNO>ITEM001</buyerItemNO>
<header_id>1</header_id>
<poLineNo>1</poLineNo>
<quantity>1000</quantity>
<requestDeliveryDate>2026-09-30T11:36:39.0000+08:00</requestDeliveryDate>
<status>0</status>
</test_order_item>
</test_order_header>
</Items>
检查输出 XML 时,重点确认以下内容:
| 检查项 | 说明 |
|---|---|
| 父表数据是否正确 | 例如订单头字段是否完整 |
| 子表数据是否正确 | 例如明细行是否只属于当前订单 |
| 字段类型是否正确 | 日期、数字字段是否按预期输出 |
| 是否存在重复数据 | 如果重复,检查过滤条件和状态位 |

4.3 配置自动接收
手动测试成功后,可以配置自动化,让 Select 端口定时从 MySQL 查询数据。
进入自动化界面,勾选启用自动接收,开启后,端口会按设定的接收间隔自动查询 MySQL 数据源。支持多种调度模式

五、高级设置与优化
5.1 输出与批量设置
以下设置在 Select 场景中较为常用,决定查询结果如何输出。
| 配置项 | 说明 | 建议 |
|---|---|---|
| 输出文件格式 | 输出数据的格式,支持 XML、 CSV、 TSV |
默认 XML,便于下游端口(如 XML Map、EDI)处理;包含子表的复杂结构不支持 CSV 和 TSV |
| 最大记录数 | 单个输出消息中包含的最大记录数 | 0 表示端口根据输出格式自行决定;-1 表示所有记录放入单个文件 |
| 本地文件名格式 | 输出文件的命名规则,支持宏 | 建议包含 %ShortDate% 或 %MessageId%,便于追溯 |
本地文件名格式常用宏示例:
| 宏 | 含义 |
|---|---|
%ConnectorID% |
当前端口 ID |
%ShortDate% |
当前日期(如 2026-08-28) |
%MessageId% |
当前输出消息的唯一 ID |
%Table% |
查询的表名 |
示例命名:
MysqlSelect_%ShortDate%_%MessageId%
5.2 连接池设置
连接池管理数据库连接的复用,减少每次查询创建新连接的开销。
| 配置项 | 说明 | 建议 |
|---|---|---|
| 使用连接池 | 是否启用连接池 | 建议启用,可提升频繁查询时的性能 |
| 连接池最大数量 | 池中允许的最大连接数 | 默认 100,按实际并发需求调整 |
| 连接池最小数量 | 池中维护的最小连接数 | 默认 1,保持默认即可 |
| 连接池等待时间 | 请求等待可用连接的最大秒数 | 默认 60,超时后返回错误 |
| 连接池空闲超时时间 | 连接在池中保持空闲的最长时间(秒) | 默认 60,超时后连接会被关闭 |

5.3 日志与排查设置
日志设置影响问题排查效率,尤其是 SQL 条件、父子表关联和状态位更新问题的定位。
| 配置项 | 说明 | 建议 |
|---|---|---|
| 日志级别 | 控制日志详细程度 | 日常使用 Info;排查时改为 Debug,可查看实际执行的 SQL |
| 保留消息副本 | 是否在日志目录保存消息副本 | 建议开启,方便查看输入输出文件 |
| 日志文件夹结构 | 按时间分组保存日志 | 日志量大时建议按 Weekly 或 Daily 分组 |
| 查询超时时间 | SQL 命令执行超时时间(秒) | 查询慢或数据量大时适当调大 |
排查 Select 问题时,建议先临时将日志级别改为 Debug,手动点击“接收文件”,然后在事务日志中查看实际执行的 SQL,确认查询条件是否正确。
六、查看事务日志
在 MySQL Select 端口的事务页面,可以查看每次手动接收或自动接收产生的记录。它是排查 Select 问题最常用的位置。
6.1 查看 Select 输出文件
Select 查询成功后,事务页面会生成一条记录。点击文件名,可以查看或下载输出 XML。
重点查看:
| 检查项 | 说明 |
|---|---|
| 输出 XML 是否生成 | 判断 Select 是否查询到数据 |
| 父表字段是否完整 | 判断表字段是否勾选正确 |
| 子表节点是否正确 | 判断父子表关联是否正确 |
status 是否符合预期 |
判断状态位更新前后的数据是否正常 |

6.2 查看日志详情
展开事务记录后,可以查看端口本次执行的详细日志。排查时重点关注以下内容:
| 日志内容 | 作用 |
|---|---|
| 实际执行的 SQL | 确认过滤条件是否正确 |
| 查询返回记录数 | 判断数据库是否查到数据 |
| 子表查询语句 | 判断 header_id = ${id} 是否生效 |
| 状态位更新语句 | 判断 updateValue 是否执行 |
| 错误堆栈 | 判断是否为连接、权限、SQL 或字段问题 |
提示:如果日志内容不够详细,可以临时将日志级别改为
Debug后重新测试。问题确认后再改回Info。
七、常见问题与排查思路
7.1 测试连接失败
可能原因:
- MySQL 服务未启动。
- Server 或 Port 填写错误。
- 防火墙未开放。
- 用户名或密码错误。
- Database 名称不存在。
- 数据库用户没有远程访问权限。
排查建议:
- 使用 MySQL 客户端在知行之桥服务器上测试连接。
- 确认端口是否为
3306或实际 MySQL 端口。 - 确认 MySQL 用户是否允许远程登录。
- 确认用户是否有目标表的
SELECT权限。
7.2 Select 没有输出
可能原因:
- 过滤条件过严,数据库中没有符合条件的数据。
status = 0的数据已经被处理成status = 1。- 表或字段选择错误。
- 自定义 SQL 在 MySQL 中本身查不到结果。
排查建议:
- 先把 Select SQL 放到 MySQL 客户端中执行。
- 确认数据库中存在符合条件的数据。
- 临时去掉部分过滤条件,缩小问题范围。
- 检查是否开启了处理后更新状态位。
7.3 子表数据不正确
如果子表输出过多、过少或和父表对不上,通常是父子表关联条件有问题。
重点检查:
| 检查项 | 示例 |
|---|---|
| 子表外键是否正确 | test_order_item.header_id |
| 父表字段是否正确 | test_order_header.id |
| 子表条件是否正确 | header_id = ${id} |
| 子表是否挂在正确父表下 | test_order_item 应在 test_order_header 下 |
7.4 读取后状态没有更新
如果配置了读取后更新 status,但数据库中状态没有变化,可以按以下方向排查:
| 检查项 | 说明 |
|---|---|
| 主键是否识别 | 表中应有主键字段,例如 id key="true" |
| 更新字段是否配置正确 | 例如 <status updateValue="1" /> |
| 当前记录是否成功输出 | 只有 MySQL Select 成功提取该行后才会更新 |
| 数据库用户是否有 UPDATE 权限 | 只有 SELECT 权限无法更新状态 |
| 日志中是否有更新 SQL | Debug 日志可查看状态位更新动作 |
7.5 查看日志
排查 Select 问题时,可以临时将日志级别改为 Debug,然后重新点击“接收文件”。
日志中重点查看:
| 日志内容 | 作用 |
|---|---|
| 实际执行的 SQL | 判断查询条件是否正确 |
| 返回记录数 | 判断是否查到数据 |
| 子表查询 | 判断父子表关联是否正确 |
| 更新状态位 SQL | 判断 updateValue 是否执行 |
八、总结
MySQL Select 端口的作用是从 MySQL 数据库中查询数据,并将结果输出为知行之桥可以继续处理的 XML。
配置 Select 时,建议按以下顺序操作:
- 先创建并测试 MySQL 连接。
- 在 Action 页面选择 Select。
- 先选择父表,再根据业务需要添加子表。
- 为父表添加业务过滤条件,例如
status = 0。 - 为子表添加关联条件,例如
header_id = ${id}。 - 如需避免重复拉取,可配置处理后更新状态位。
- 先手动点击“接收文件”测试,再开启自动化。
- 出现问题时,查看事务日志和实际执行 SQL。
对于订单头和订单明细这类一对多业务,推荐使用“父表和子表”结构;对于报表类或扁平数据输出,可以使用“联接表”结构。






