# XBatis Jump **Repository Path**: dodoyu/xbatis-jump ## Basic Information - **Project Name**: XBatis Jump - **Description**: 专为 xbatis 打造的 IDEA 小鸟跳转插件,让 Entity、Mapper、Dao 等一键直达(不依赖 XML) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: https://xbatis.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-30 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: xbatis, IDEA, IDEA插件, MyBatis ## README # XBatis Jump 为 Java ORM 框架 **[xbatis](https://xbatis.cn/)**(v1.10.9)开发的 IntelliJ IDEA 插件,插件名 **XBatis Jump**。 插件在编辑器左侧 gutter(行号栏)显示「小鸟图标」,点击即可在 xbatis 的 **实体类、Mapper 接口、Dao 接口、链式查询、VO** 之间一键双向跳转。专为 xbatis 的 Java DSL 设计,**不处理 XML**,也不重复 IDEA 原生 / MyBatisX 的能力。 > 官方网站:[https://xbatis.cn/](https://xbatis.cn/) > 框架仓库:[https://gitee.com/xbatis/xbatis](https://gitee.com/xbatis/xbatis) > 插件仓库:[https://gitee.com/dodoyu/xbatis-jump](https://gitee.com/dodoyu/xbatis-jump) > JetBrains 市场:[https://plugins.jetbrains.com/vendor/WangZeyu](https://plugins.jetbrains.com/vendor/WangZeyu) --- ## 功能一览(全部基于 PSI 局部解析 + 缓存,零全工程扫描) | 跳转关系 | 小鸟出现位置 | 点击跳转到 | |----------|--------------|------------| | **实体类 ↔ Mapper ↔ Dao 三角** | 带 `@Table` 的实体类标识符 / Mapper 接口标识符 / Dao 接口标识符 | 实体类处合并列出 Mapper 与 Dao;Mapper、Dao 各自跳回实体类 | | **链式查询字段引用 ↔ 实体字段** | 链式查询里的 `SysUser::getId` 方法引用,或 `SysUser.Fields.userName` 类型安全常量,或实体字段标识符 | getter 定义 / 实体字段 / 所有引用该字段的调用点(方法引用、Fields 常量) | | **VO ↔ 实体** | `@ResultEntity` 类标识符,或 `@ResultEntityField` / `@NestedResultEntity` 字段标识符 | 实体类 / 实体字段(支持跨实体 `target`、嵌套 VO 映射) | ### 明确不做 - 代码生成、SQL/字段补全、Inspection - Mapper 方法 ↔ XML 跳转(MyBatisX 已覆盖) - Kotlin / 非 Spring / 非 Java - Service → Mapper 注入跳转(IDEA Spring 已覆盖) - 条件对象导航(`@ConditionTarget` / `@Condition` / `@Conditions`):本期明确不做,专注 VO 结果映射 - 单 Mapper 模式导航(`BasicMapper` 子接口 + `setSingleMapperClass` 调用点):本期明确不做,保持精简 - 全工程扫描 CRUD 使用点(性能不可控) --- ## 跳转规则 **实体类 ↔ Mapper 接口 ↔ Dao 接口(三角跳转)** - 实体类带 `@Table` 注解(`cn.xbatis.db.annotations.Table`)。 - Entity 标识符上的小鸟会**合并列出**其对应的 Mapper 接口与 Dao 接口(多目标弹窗)。 - Mapper 接口识别(满足其一): 1. 继承 `MybatisMapper`,从泛型 `T` 取实体; 2. 命名约定:`SysUser` ↔ `SysUserMapper`。 - Dao 接口识别(满足其一): 1. 继承 `cn.xbatis.core.mvc.Dao` 或 `cn.xbatis.core.mvc.IDao`(或类继承 `cn.xbatis.core.mvc.impl.BaseDaoImpl`),从泛型 `T` 取实体; 2. 命名约定:`SysUser` ↔ `SysUserDao`(同时兼容 `SysUserDaoImpl`)。 - 任一 Mapper / Dao 标识符上的小鸟都直接跳回实体类。 **链式查询字段引用 ↔ 实体字段(双向)** - 方法引用:`QueryChain.of(mapper).eq(SysUser::getId, 1)` 中 `SysUser::getId` → 跳 `SysUser.getId()`;`SysUser.getId()` → 弹出列表显示所有引用该方法的 `Entity::getId` 调用点(含 `InsertChain`/`UpdateChain`/`DeleteChain` 与 `join` 条件,兼容 `of(mapper)` 单参与 `of(basicMapper, Xxx.class)` 双参)。 - 类型安全常量(Fields):`SysUser.Fields.userName` 中的 `userName` → 跳实体对应字段;反向:实体字段 → 列所有 `Entity.Fields.userName` 使用点。优先 PSI 解析 `Fields` 内部类/常量;不可解析时按「常量名 == 字段名」字符串匹配(Lombok / 手写 / APT 均兼容)。 **VO ↔ 实体(双向)** - 类级:`@ResultEntity(SysUser.class)` 的 VO 类 ↔ `SysUser`(双向)。 - 字段级:`@ResultEntityField(property = "password")` 的 VO 字段 → 跳实体对应字段;`@ResultEntityField(target = Role.class, property = "roleName")` / `@NestedResultEntity(target = Role.class)` / `@NestedResultEntityField(...)` → 跳目标实体字段 / 目标实体(连表 / 嵌套映射,不仅限本实体)。 - `target` 缺省时回退到 `@ResultEntity` 指定的本实体;`property` 可写字符串或 `Xxx.Fields.xxx` 常量。 --- ## 适用条件 - 接口继承 / 实现 `cn.xbatis.core.mybatis.mapper.MybatisMapper` 或命名约定才会被识别为 Mapper。 - 最低支持 IDEA **2024.2**,已在 **2026.2 Community** 上编译与调试验证。 - 仅支持 Java,不依赖 Ultimate 专属 API,不依赖 Database 插件、不打包 JDBC。 --- ## 安装 ### 方式一:从 JetBrains 市场安装(推荐) `Settings / Preferences` → `Plugins` → `Marketplace`,搜索 **XBatis Jump**,安装并重启。 ### 方式二:从源码构建 ```powershell .\gradlew.bat buildPlugin # 在 IDEA 中:Settings → Plugins → ⚙ → Install Plugin from Disk... # 选择 build/distributions/xbatis-jump-*.zip ``` --- ## 常见问题 **Q:为什么我的 Mapper 没有出现小鸟图标?** A:请确认接口确实继承了 `MybatisMapper`,或命名符合 `XxxMapper` 约定且对应实体带 `@Table`。 **Q:支持 `SysUser::getId` 这种链式查询方法引用跳转吗?** A:支持。方法引用会双向跳转:从引用跳到 getter,从 getter 列出所有链式调用点;覆盖 QueryChain/InsertChain/UpdateChain/DeleteChain 与 `join` 条件,兼容 `of(mapper)` 单参与 `of(basicMapper, Xxx.class)` 双参。 **Q:支持 Lombok 字段(`Fields.xxx`)吗?** A:支持。`SysUser.Fields.userName` 会优先 PSI 解析,失败则按字段名字符串匹配实体字段;在实体字段上点小鸟还能反向列出所有 `Fields.xxx` 使用点。 **Q:支持 `@ResultEntityField(target=…)` / `@NestedResultEntity` 关联映射吗?** A:支持。`target` 指向另一个实体时,可直接跳到目标实体字段或目标实体,反向也能从目标字段/实体跳回所有引用它的 `@ResultEntityField` / `@NestedResultEntityField` 注解。