AI MCP Gateway-数据层落地
AI MCP Gateway 从消息处理案例到 DAO 数据层落地
一、这一节做了什么
3.6 分支是在 3.5 分支的基础上继续向前推进的一步。
如果说 3.5 还停留在“消息协议处理案例”的阶段,那么 3.6 做的核心事情,就是把项目的基础设施层数据能力补齐,正式引入了:
- MyBatis 持久层映射
- DAO 接口定义
- PO 数据对象
- MCP 网关相关库表设计
- CRUD 测试验证
这一节的主题可以概括为:
从“协议消息怎么处理”,推进到“这些协议配置和网关信息如何落库、如何查询、如何维护”。
二、3.6 比 3.5 多了什么
3.6 分支相对 3.5 主要新增了 1 个提交:
feat: 第3-6节:基础层数据处理(Dao)
从改动内容看,重点不是业务逻辑编排,而是数据层正式建模。
1. 新增了 4 组核心 DAO 接口
这一节新增了 4 个 DAO 接口,分别负责 4 张核心业务表的持久化操作:
IMcpGatewayDaoIMcpGatewayAuthDaoIMcpProtocolRegistryDaoIMcpProtocolMappingDao
每个 DAO 都提供了统一的基础 CRUD 能力:
insertdeleteByIdupdateByIdqueryByIdqueryAll
也就是说,到了 3.6,项目已经不再只是定义消息结构,而是具备了真正访问数据库的能力。
2. 新增了 4 组 PO 对象
为了配合 DAO 和 MyBatis 映射,这一节还新增了对应的 PO 对象:
McpGatewayPOMcpGatewayAuthPOMcpProtocolRegistryPOMcpProtocolMappingPO
这些对象的作用,是把数据库表结构映射成 Java 中的领域外数据承载对象,方便:
- 数据库存取
- Mapper 映射
- 测试构造
- 后续仓储层或领域层转换
这一步是典型的基础设施层建设。
3. 新增了 4 份 MyBatis Mapper XML
除了 Java 接口和 PO,这一节还补上了对应的 MyBatis XML 映射文件:
mcp_gateway_mapper.xmlmcp_gateway_auth_mapper.xmlmcp_protocol_registry_mapper.xmlmcp_protocol_mapping_mapper.xml
这些 XML 文件的作用是:
- 定义表字段和 PO 属性之间的映射关系
- 编写具体 SQL
- 实现基础增删改查
这说明 3.6 已经从“接口定义”走到了“SQL 可执行”的阶段。
4. 正式切换到 MCP 网关业务库表
3.5 之前,项目里还有较明显的示例工程痕迹,比如:
- 使用旧示例库
xfg_frame_archetype - 存在旧的
frame_case_mapper.xml - 配套 SQL 也是示例数据结构
到了 3.6,这些都被替换为正式的 MCP 网关业务模型:
- 数据库切换为
ai_mcp_gateway - 删除旧案例 Mapper
- 新增正式 SQL 脚本
ai_mcp_gateway.sql
这说明项目从“演示性质的数据结构”切换到了“面向 MCP Gateway 的正式数据结构”。
5. 开启 MyBatis 配置
在 application-dev.yml 中,这一节做了两件很关键的事情:
- 数据源从旧库切换到
ai_mcp_gateway - 开启 MyBatis 配置项
也就是说,从这一步开始,项目本地运行时已经能真正加载 MyBatis Mapper,并与正式数据库打通。
6. 增加了完整的 DAO 测试
这一节还新增了 4 组 DAO 测试类,覆盖了典型数据操作场景,例如:
- 插入数据
- 根据 ID 查询
- 查询全部
- 更新数据
- 删除数据
- 校验 SQL 初始化数据是否可读
这一步很重要,因为它意味着:
3.6 不是只把接口和 XML 写出来,而是已经通过测试把整个数据链路验证了一遍。
三、这 4 张表分别是干什么的
为了理解这一节的价值,需要先理解这 4 张表在整个 MCP Gateway 里的职责。
1. mcp_gateway:网关基础信息表
这一张表保存的是网关本身的信息,比如:
- 网关唯一标识
- 网关名称
- 网关描述
- 启用/禁用状态
它解决的问题是:
系统里有哪些网关,每个网关是什么,当前是否启用。
2. mcp_gateway_auth:网关鉴权配置表
这张表用于保存某个网关的访问控制信息,例如:
api_key- 速率限制
- 过期时间
- 状态
它解决的问题是:
调用这个网关是否需要鉴权,凭证是什么,访问有没有限制。
3. mcp_protocol_registry:MCP 工具注册表
这张表可以理解为“工具目录”或“协议注册中心”,保存的是:
- 属于哪个网关
- 工具 ID
- 工具名称
- 工具描述
- HTTP 地址
- 请求方法
- 请求头
- 超时时间
- 重试次数
它解决的问题是:
某个 MCP 工具最终要映射到哪个 HTTP 接口,以及调用它需要什么基础配置。
4. mcp_protocol_mapping:协议字段映射表
这是最关键的一张配置表之一,用来保存 MCP 协议字段与 HTTP 请求/响应字段之间的映射关系,例如:
- 是请求映射还是响应映射
- 字段的层级结构
- MCP 路径
- HTTP 路径
- 字段类型
- 是否必填
- 参数位置(body/query/path/header)
它解决的问题是:
MCP 工具协议里的字段,最终应该如何组装成 HTTP 请求,以及 HTTP 返回结果又应该如何反向映射回 MCP 协议结构。
四、这一节的核心流程是什么
这一节真正建立起来的流程,可以概括为下面这条链路:
1. 先设计业务表结构
首先,要明确 MCP Gateway 运行时到底需要哪些持久化信息。
于是项目把数据拆成 4 类:
- 网关基础信息
- 网关鉴权配置
- 工具注册信息
- 协议字段映射信息
这一步的本质是:
先把“运行一个网关到底需要保存什么信息”定义清楚。
2. 根据表结构定义 PO 对象
数据库表有了之后,Java 侧需要能承接这些数据,所以新增了对应的 PO 类。
例如:
- 一条网关记录,对应一个
McpGatewayPO - 一条工具注册记录,对应一个
McpProtocolRegistryPO
这一步的作用是:
让数据库记录可以在 Java 代码中以对象方式流转。
3. 定义 DAO 接口,抽象数据访问能力
接下来,为每张表定义 DAO 接口,把数据访问动作抽象出来。
例如:
- 插入网关配置
- 查询某个工具注册信息
- 更新某条映射规则
- 删除某个鉴权配置
这一步的意义在于:
上层业务不需要关心 SQL 细节,只需要通过 DAO 获取和维护数据。
4. 用 MyBatis Mapper XML 把 DAO 和 SQL 连接起来
DAO 只是接口,真正执行 SQL 的是 MyBatis Mapper XML。
Mapper 负责完成两件事:
- 把数据库字段映射到 PO 属性
- 把 DAO 方法映射到具体 SQL
这样之后,一次查询链路就打通了:
- 业务调用 DAO
- DAO 对应到 Mapper XML
- Mapper 执行 SQL
- SQL 查询结果映射回 PO
5. 配置数据源与 MyBatis 运行环境
为了让这些 DAO 真正跑起来,还需要:
- 指向正确数据库
- 开启 MyBatis Mapper 扫描
- 加载 MyBatis 配置文件
因此 application-dev.yml 也完成了相应切换。
这一步完成后,项目已经具备本地联调数据库的能力。
6. 通过 DAO 测试验证整条链路可用
最后再通过测试完成验证:
- 插入是否成功
- 主键是否正确回填
- 查询是否能读出数据
- 更新是否生效
- 删除是否可用
- 初始化 SQL 的样例数据是否能查到
这一步的意义是:
把“设计完成”变成“可运行、可验证、可继续迭代”。
五、如果站在整个项目演进上,3.6 处于什么位置
从项目演进角度看,3.6 是非常关键的一步,因为它完成了从“协议处理案例”到“可落地数据基础设施”的过渡。
在它之前,项目更偏向:
- 会话管理
- SSE 接口
- MCP 消息结构
- 消息处理案例
而从 3.6 开始,项目进入了一个更工程化的阶段:
- 有正式库表
- 有正式 DAO
- 有正式 Mapper
- 有正式测试
- 后续的协议注册、字段映射、鉴权、网关配置,都可以建立在这套数据底座之上
可以说:
3.6不是直接增强了 MCP 协议处理能力,而是为后续所有网关配置化能力打下了数据基础。
六、这一节的价值总结
这一节最大的价值,不在于增加了多少业务功能,而在于它让项目具备了“配置可持久化”的能力。
总结下来,3.6 主要完成了三件事:
- 把 MCP Gateway 的核心配置抽象成正式库表
- 用 DAO + MyBatis 建立了完整的数据访问能力
- 用测试验证了数据链路真实可用
这意味着后面的系统能力,不再只能写死在代码里,而是可以逐步走向:
- 配置化
- 持久化
- 可维护
- 可扩展
这正是一个网关系统从 Demo 走向工程化实现的重要一步。
七、一句话总结
3.6 分支相比 3.5,核心不是新增消息协议能力,而是补齐了 MCP Gateway 的 DAO 数据层、MyBatis 映射和正式库表设计,为后续网关注册、协议映射、鉴权与配置管理提供了持久化基础。
