为什么需要它
用 AI 工具(Codex、Cursor、Claude Code)改 Spring Boot 项目的朋友,应该都遇到过这个问题:让 AI 分析一个接口的调用链,或者评估"改一个实体会影响哪些接口",它的做法是全局搜索关键词,然后靠推理拼链路。
这种方式在 MyBatis 项目上有天然缺陷:
- MyBatis-Plus 的内置方法没有 SQL 文本:
selectById、insert、updateById这些方法实际执行SELECT */ 全表写,但 grep 搜不到任何 SQL - Spring 的依赖注入和事务是注解约定:不在显式调用关系里
- SQL 来源分散:注解、XML 文件、JdbcTemplate 字符串、Wrapper 动态拼接,四种地方都可能有
我手头一个 Spring Boot 项目实测:同一个字段影响面分析,AI 人工排查给出 5 条路由,ContextGate 静态分析给出 8 条——漏的 3 条全部是 MP 内置 CRUD 链路。
ContextGate 能做什么
开源地址:https://github.com/23512478/ContextGate(MIT 协议)
- trace_call:输入路由(如
GET /api/v1/orders/my)或方法名,输出完整调用链 Controller → Service → Mapper → SQL,标注@Transactional事务边界、MP Wrapper、JdbcTemplate SQL - find_sql:按 Mapper 方法名、表名、列名反查 SQL,给出 SQL 全文、触碰列、上游路由
- impact:改实体/字段前查影响面——波及哪些自定义 SQL、多少个 MP 内置调用点、多少条路由
- refresh_map:代码改完一键刷新地图,秒级完成
快速使用
1. 分析你的项目(分析器零依赖,Python 3.10+):
Bash
运行
python analyzer/framework_map.py /path/to/your-project2. 安装 MCP Server 依赖:
Bash
运行
pip install -r mcp-server/requirements.txt3. 在 AI 工具中配置(Trae 放项目.trae/mcp.json,Cursor 写全局配置):
JSON
{ "mcpServers": { "contextgate": { "command": "python", "args": ["/你的路径/ContextGate/mcp-server/mcp_server.py"], "env": { "CONTEXTGATE_PROJECT": "/你的SpringBoot项目路径", "CONTEXTGATE_MAP": "/分析产出的framework_map.json路径" } } } }4. 零配置体验:不想配项目也可以直接跑python mcp-server/test_mcp.py,会自动分析内置 demo 项目并走完所有工具调用。
接入后直接用自然语言提问即可,AI 会自动调用对应工具。
已支持的解析能力
- Spring:路由注解、
@Autowired注入、@Transactional闭包传播、@PostConstruct等隐藏入口 - MyBatis:
@Select/@Update注解 SQL、XML mapper(resultMap、sql 片段 + include、set/if 动态标签) - MyBatis-Plus:BaseMapper 内置方法(合成 SELECT */全表写)、
LambdaQueryWrapper/lambdaQuery()动态链(eq/like/in/set/orderBy 方法引用还原为 SQL) - 其他:JdbcTemplate 裸 SQL(支持局部变量传参)、全限定类型字段、裸
SELECT *与别名星号展开、跨表 JOIN 列精确归因
欢迎参与
项目每条解析规则都是真实项目的漏报逼出来的,目前规则只经过一个项目验证,欢迎大家拿自己的项目测试:
- 发现漏报(某条链路/SQL 没识别):提 Issue 附一小段源码即可,这是对项目最大的帮助
- 想补规则:CONTRIBUTING.md 有完整的代码地图和"夹具 + 断言"流程说明
- 已知排队需求:Wrapper 跨语句链式调用、XML association/collection/foreach、多模块 Maven 路径
觉得有用的话欢迎 Star ⭐,项目地址:https://github.com/23512478/ContextGate