🚀 xbatis:重新定义 MyBatis 开发体验
写在前面
还在为繁琐的 MyBatis XML 配置而烦恼吗?还在为 SQL 注入风险而担忧吗?xbatis 横空出世,让 Java 数据库开发再次变得优雅!
💡 为什么选择 xbatis?
🎯 三大核心价值
少写 SQL - 链式 DSL 让代码如诗如画 1
java
// 告别 XML,拥抱类型安全
List<SysUser> users = QueryChain.of(sysUserMapper)
.eq(SysUser::getId, 1)
.like(SysUser::getUserName, "admin")
.forSearch(true)
.list();
链路化 DSL - 复杂查询一气呵成 2
java
// 多表关联、分组统计、子查询,一行搞定
SysUserRoleVo vo = QueryChain.of(sysUserMapper)
.select(SysUser.class, SysRole.class)
.from(SysUser.class)
.join(SysUser::getRoleId, SysRole::getId)
.eq(SysUser::getId, 1)
.groupBy(SysUser::getId)
.having(SysUser::getId, c -> c.count().gt(0))
.returnType(SysUserRoleVo.class)
.get();
跨数据库兼容 - 一套代码,处处运行 3
支持 MySQL、PostgreSQL、Oracle、SQL Server、达梦、人大金仓等 12+ 数据库!
🚀 五大杀手级特性
1. 🤖 自动 SQL 优化
智能移除冗余 JOIN、优化 COUNT 查询、自动调整 ORDER BY 4
java
// 框架自动优化,性能提升 30%+
QueryChain.of(sysUserMapper)
.select(SysUser::getId, SysUser::getUserName)
.leftJoin(SysUser::getRoleId, SysRole::getId) // 未使用时自动移除
.count(); // 自动转换为 SELECT COUNT(*)
2. 🎯 单 Mapper 模式
一个 BasicMapper 横跨全部实体,告别接口爆炸 5
java
// 全项目只需一个 Mapper
@Autowired
private MybatisBasicMapper mapper;
// 通用 CRUD,类型安全
mapper.save(new SysUser());
mapper.deleteById(SysUser.class, 1);
3. ⚡ 内置 RETURNING 支持
更新删除即时返回,无需额外查询 6
java
// 删除并返回被删除的数据
List<SysUser> removed = DeleteChain.of(sysUserMapper)
.in(SysUser::getId, 1, 2)
.returning(SysUser.class)
.executeAndReturningList();
4. 🛡️ 企业级特性开箱即用
- 多租户隔离:
@TenantId自动过滤 - 逻辑删除:
@LogicDelete软删除支持 - 乐观锁:
@Version防并发冲突 - 审计字段:
@OnInsert、@OnUpdate自动填充
5. 🔧 完美兼容现有项目
零侵入设计 - 对 MyBatis 仅做封装,不修改核心 7
xml
<!-- 只需替换依赖,现有代码无需改动 -->
<dependency>
<groupId>cn.xbatis</groupId>
<artifactId>xbatis-spring-boot3-starter</artifactId>
<version>1.9.3</version>
</dependency>
📊 性能对比
| 特性 | 原生 MyBatis | MyBatis-Plus | xbatis |
|---|---|---|---|
| 类型安全 | ❌ | ✅ | ✅ |
| 自动优化 | ❌ | ❌ | ✅ |
| 单 Mapper | ❌ | ❌ | ✅ |
| RETURNING | ❌ | 部分 | ✅ |
| 学习成本 | 中 | 中 | 低 |
🎁 立即体验
快速开始
java
// 1. 实体类
@Table
public class SysUser {
@TableId
private Integer id;
private String userName;
}
// 2. Mapper 接口
public interface SysUserMapper extends MybatisMapper<SysUser> {}
// 3. 开始使用
@Autowired
private SysUserMapper mapper;
// 链式查询,优雅至极
List<SysUser> users = QueryChain.of(mapper)
.like(SysUser::getUserName, "admin")
.list();
更多资源
- 🌐 官方网站:https://xbatis.cn
- 📚 详细文档:https://deepwiki.com/xbatis/xbatis
- 💻 Gitee 仓库:https://gitee.com/xbatis/xbatis
- 🔄 GitHub 镜像:https://github.com/xbatis/xbatis
🤝 加入我们
xbatis 正在快速发展,我们需要你的力量:
- 🐛 发现 Bug?提交 Issue 帮助改进
- 💡 有好想法?欢迎提交 PR
- 📝 善于写作?贡献文档和教程
- 🎤 热爱分享?成为社区推广大使
🔮 未来展望
- IDE 插件开发中,智能提示即将到来
- 更多数据库适配器持续完善
- 企业级最佳实践案例集即将发布
- 国际化社区建设全面启动
xbatis 不只是一个框架,更是 Java 数据库开发的未来!
立即体验 xbatis,让数据访问再次变得简单而优雅! ⭐
Notes
- 文章突出了 xbatis 的差异化优势,特别是自动 SQL 优化和单 Mapper 模式
- 使用了大量实际代码示例,展示链式 DSL 的优雅性
- 强调了零侵入设计,降低用户迁移成本
- 包含了完整的快速开始指南和资源链接
- 呼吁开发者参与社区建设,形成推广合力
Wiki pages you might want to explore:
Citations
File: README.zh-CN.md (L17-17)
markdown
- **定位**:xbatis 基于 MyBatis,实现高度 ORM 化的数据库操作体验,强调"少写 SQL、链路化 DSL、跨数据库兼容"。
File: README.zh-CN.md (L19-20)
markdown
- 多表关联、子查询、链路分页、自动 SQL 优化(自动移除冗余 `LEFT JOIN`、`ORDER BY`,智能 `COUNT` 化简)。
- 内置 `RETURNING` 支持、批量插入与批量更新链路、原生函数包装、SQL 模板。
File: README.zh-CN.md (L21-21)
markdown
- 单 Mapper 模式,支持一个 `BasicMapper` 横跨全部实体。
File: README.zh-CN.md (L25-25)
markdown
1. 极致轻量:对 MyBatis 仅做封装而非侵入式改造。
File: README.zh-CN.md (L605-617)
markdown
```java
SysUserRoleVo vo = QueryChain.of(sysUserMapper)
.select(SysUser.class, SysRole.class)
.from(SysUser.class)
.join(SysUser::getRoleId, SysRole::getId)
.eq(SysUser::getId, 1)
.like(SysUser::getUserName, "abc")
.groupBy(SysUser::getId)
.having(SysUser::getId, c -> c.count().gt(0))
.orderBy(SysUser::getId)
.returnType(SysUserRoleVo.class)
.get();