[特殊字符] xbatis:重新定义 MyBatis 开发体验

🚀 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();

更多资源


🤝 加入我们

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();
复制代码
相关推荐
wljt11 小时前
公司二-面试题
java·开发语言·mybatis
VimorphTech15 小时前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis
麻瓜code19 小时前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis
郭小李2 天前
mybatis 动态 sql
java·sql·mybatis
知守观2 天前
技术考古:iBATIS 2.3.4 时代的持久层,是如何用 Map 玩转 307 个存储过程的?
java·后端·mybatis
captain3762 天前
MyBatis Plus(1)
java·服务器·mybatis
代码不停2 天前
MyBatis进阶
spring boot·mybatis
captain3762 天前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
captain3762 天前
MyBatis(进阶1)
mybatis
郭小李3 天前
mybatis的 Mapper.xml语法
xml·java·mybatis