如果 MyBatis 会进化,它大概会长成 xbatis 的样子

28 阅读4分钟



很多同学一看到 MyBatisHibernateJPA 这些词,脑子里立刻浮现四个字: “配置地狱”

XML、注解、映射、SQL、ResultMap……还没跑代码,人已经开始焦虑。

于是有一天,我在公司茶水间接了杯咖啡,突然听到隔壁工位的小伙伴说了一句:

“要是有个框架,既懂 SQL,又不折磨人,那该多好。”

我当时一拍桌子(咖啡差点洒了):“兄弟,你这不是在召唤 xbatis 吗?”

今天,就让我用一个故事,带你认识一个“假想但非常真实”的技术角色——xbatis

故事的开端:一家叫“数据城”的餐厅

我们先别急着讲框架。想象一下,有一家叫 数据城 的餐厅。

  • 数据库:厨房
  • SQL:菜单
  • Java 对象:端到你面前的菜
  • ORM 框架:服务员

传统 JDBC 是什么体验?

  • 顾客(你)
  • → 亲自跑进厨房
  • → 告诉厨师切什么菜
  • → 自己装盘
  • → 自己端出来
  • → 吃完还得自己洗碗

代码大概长这样:

累不累?

累。

脏不脏?

脏。

于是 MyBatis 出现了,相当于请了个服务员。但问题是这个服务员太严格了。

菜单要你自己写,上菜方式要你精确规定,盘子怎么摆,都要你亲自教。于是,xbatis 登场了。

xbatis 是谁?它想解决什么问题?

我常跟新人这样介绍:MyBatis 是“听话的服务员”xbatis 是“会看脸色的老服务员”

xbatis 的核心理念,一句话总结:SQL 你来写,剩下的交给我, 它不试图“消灭 SQL”,也不强行“对象世界统治数据库”。

它的目标只有三个:

  1. 少配置
  2. 强约定
  3. 结果自动映射

xbatis 的世界观:约定大于配置

表结构 ≈ 对象结构

假设我们有一张表:

对应的 Java 对象:

在 xbatis 的世界里:

  • user_name → userName
  • 下划线 → 驼峰
  • 默认自动完成

你不需要写 ResultMap,因为 xbatis 觉得你不是来折磨自己的

第一次使用 xbatis:像点外卖一样简单

Mapper 接口

你会发现一个奇怪的地方:没有注解,没有 XML, 那 SQL 在哪?

xbatis 的“菜单系统”:SQL 就该待在 SQL 里

xbatis 认为:

SQL 是给人看的,不是给 Java 注解看的

于是它采用了一种非常“反内卷”的方式:

特点只有一句话:方法名 = SQL 名字, 参数名自动绑定,返回值自动映射。

xbatis 的参数绑定:像聊天一样自然

你有没有注意到:

where id = :id

这里不是 ?,而是 命名参数

xbatis 在内部做了三件事:

  1. 反射读取方法参数名
  2. 构建参数 Map
  3. 自动安全绑定(防 SQL 注入)

调用代码:

User user = userMapper.findById(1L);

没有 setXxx,没有顺序问题。

动态 SQL?xbatis:别怕,我懂你

MyBatis 的动态 SQL:

xbatis 的思路更像写剧本:

语义清晰,结构直观,不用在 XML 里对着转义符流泪。

事务管理:老板结账,不是服务员掏钱

xbatis 从不抢事务的活。

事务交给 Spring,xbatis 专心搬菜,各司其职,世界和平

xbatis vs MyBatis:一次正面交锋

我们来一张表,冷静一下。

性能问题?xbatis 不做“多余的事”

xbatis 的哲学是:不帮你优化 SQL,但绝不拖你后腿

  • 不生成多余 SQL
  • 不引入复杂缓存魔法
  • 一次方法调用 = 一次明确 SQL

如果你 SQL 慢,xbatis 会非常诚实地告诉你:“兄弟,这锅我不背。”

xbatis 适合谁?

我一般这样建议:

非常适合

  • 业务系统
  • 中后台
  • 对 SQL 有掌控欲的团队
  • 不想被 ORM 魔法支配的工程师

不太适合

  • 完全不想写 SQL
  • 强依赖对象关系自动生成
  • CRUD 全靠 IDE 的项目

总结:技术框架,其实都像人

我一直觉得:

  • JDBC 像刚毕业的实习生
  • Hibernate 像爱炫技的专家
  • MyBatis 像认真但古板的老师
  • xbatis 像一个懂业务的老员工

它不多说话,不指手画脚,但你一开口,它就知道你想要什么。如果你也厌倦了:

  • 一堆 XML
  • 一堆 ResultMap
  • 一堆“为了框架而写的代码”

那你大概会和我一样,对 xbatis 这种理念,会心一笑。

END

我们,下篇见。

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!