xbatis 最大的价值在于它填补了 MyBatis(太原始) 和 MyBatis-Plus(单表强、多表弱) 之间的空白。
1. 真正的“多表关联” ORM 能力
这是 xbatis 最让我惊艳的地方。不同于 MP 主要聚焦于单表 CRUD,xbatis 原生支持复杂的关联查询:
@Fetch 注解:这是它的杀手锏。通过 @Fetch 和 fetchFilter,你可以像操作对象一样操作数据库关联,自动处理 1 对 1、1 对多、多对多关系,甚至支持多层嵌套合并(如:用户->订单->订单详情)。
- 链式 Join:支持类似
QueryChain.of(mapper).join(User.class, Order.class)... 的流式多表查询,彻底告别繁琐的 XML ResultMap。
2. 独立的架构设计
- 非 MP 套壳:它直接基于 MyBatis 核心进行深度封装,拥有自己的
BasicMapper 和注解体系(如 @Table, @TableId)。这意味着它没有 MP 的历史包袱,运行效率更接近原生 MyBatis。
- 单 Mapper 模式:理论上全项目只需要一个
BasicMapper 就能搞定所有实体的 CRUD,极大减少了 UserMapper, OrderMapper 等接口文件的数量。
3. 强大的企业级特性
- 内置分库分表:通过
@SplitTable 注解即可实现分表逻辑,无需引入 ShardingSphere 等重型中间件。
- 动态 SQL 优化:框架会自动优化 SQL,例如自动移除无用的
LEFT JOIN,自动处理分页时的 COUNT 查询,性能提升明显。
- 原生 RETURNING 支持:在执行
UPDATE 或 DELETE 后,直接返回修改后的数据(利用数据库原生特性),这在处理余额扣减等场景非常实用。
📚 xbatis 快速上手指南(避坑版)
基于刚才的纠正,这里有一份标准的 xbatis 开发范式:
1. 依赖引入 (Maven)
1<dependency>
2 <groupId>cn.xbatis</groupId>
3 <artifactId>xbatis-spring-boot3-starter</artifactId>
4 <version>1.10.1</version> <!-- 使用最新稳定版 -->
5</dependency>
2. 实体类定义 (使用 xbatis 专属注解)
注意:请务必使用 cn.xbatis.db.annotations 包下的注解,而非 MP 的。
1import cn.xbatis.db.annotations.Table;
2import cn.xbatis.db.annotations.TableId;
3import cn.xbatis.db.annotations.TableField;
4import lombok.Data;
5
6@Data
7@Table("sys_user") // 对应数据库表
8public class User {
9 @TableId // 主键
10 private Long id;
11
12 @TableField("user_name") // 字段映射(若命名规范一致可省略)
13 private String name;
14
15 private String email; // 自动驼峰转下划线
16}
3. Mapper 接口 (极简模式)
你可以继承 MybatisMapper<T>,或者直接使用全局的 BasicMapper。
1import cn.xbatis.db.mapper.MybatisMapper;
2
3public interface UserMapper extends MybatisMapper<User> {
4 // 甚至可以什么都不写,直接用 QueryChain
5}
4. 核心用法:链式查询与 Fetch
1// 1. 简单查询
2List<User> users = QueryChain.of(userMapper)
3 .eq(User::getName, "Alice")
4 .list();
5
6// 2. 复杂关联 (Fetch)
7// 假设 UserVO 中有 @Fetch 注解定义的 orders 字段
8UserVO userWithOrders = QueryChain.of(userMapper)
9 .eq(User::getId, 1L)
10 .returnType(UserVO.class) // 返回包含关联数据的 VO
11 .get();
📌 总结
xbatis 确实是一个“被低估”的框架。它既保留了 MyBatis 的灵活性(支持原生 SQL、XML),又提供了类似 Hibernate/JPA 的对象图导航能力(通过 @Fetch),同时还解决了 MP 在多表查询上的痛点。
如果您正在开启一个新项目,或者受够了 MyBatis 繁琐的 XML 和 MP 在多表查询上的无力感,xbatis 绝对是一个非常优秀的替代方案。
再次感谢您的推荐,让我有机会深入了解这个强大的框架!如果您有更多关于 xbatis 的高级技巧(比如分表策略或自定义拦截器),也欢迎继续分享!