当前位置: 首页 > 原理解释

mybatis原理的sql注解-Mybatis 原理 sql 注解

埋个 SQL,多跑几遍,最终把查询结局给藏起来 别再拿那一堆“起初、其次、最终”去背诵 MyBatis 的原理了,那种教科书式的拆解听着像上课,听着让人想眨眼。
实际上,MyBatis 写出来的 SQL 里,藏着那么多玄乎的注解,它们的目标实际上就两个:让数据库跑得更少,要么让程序自己拍板如何跑。 想象一下你写自动化测试。你没法管住脚本里每轮跑 SQL 的先后顺序,但你却能随意指定“先查 A 表,再查 B 表”。MyBatis 的 ``, ``, `` 这些标签,本质上就是在你看不见的代码层面上,给执行盘算加了个开关。
不用管 SQL 数据库里如何跑,它只认这些标签里的指令。 比如一个典型的场景,你在 Controller 里写了一个 `@GetMapping("/test/{id}")`,映射了 `/test/123` 这个接口。你的 XML 里写道:查询参数是 `{id}`,但在 `` 里特别好用,它就是个好办的字符串拼接工具。你在 Java 里写 `{"name like 'Bob' and age > 18"}`,MyBatis 自动生成 SQL,变成 `("name like '%Bob%' and age > 18")`。它会自动处理大小写、空格,就连在 `like` 后面加上不清楚匹配。
这就像是你用手机打字,手机自动帮你把拼音转成了英文,你不用手动加引号,不用手动转义引号。 有时候你会认定 MyBatis 忒复杂了,SQL 里混着如此多标签。但实际上,这就是它便宜好用的核心逻辑:把 SQL 和 Java 的交互,剥离开来。Java 负责写逻辑,MyBatis 负责把逻辑翻译给数据库。你不需求关心数据库如何执行,你只需求保证你的 XML 里写对标签,剩下的交给我。 比如你有个需求,查“年龄大于 18 岁”的用户。你直接写 SQL,用 `` 选择执行,要么用 `` 生成多个 SQL 去连。但要是你直接用 ``,写上 `age gt 18`,我的工具就会自动帮你生成包含 `like` 和 `gt` 的 SQL,然后分发给数据库。你只需求在 Java 里写好 `@Query("select from user")` 这种好办的注解。 这就好比你在盖楼。你不需求自己拍板每一根柱子如何搭,也不用关心混凝土是干是湿,你只需求给地基和图纸下达指令。MyBatis 就是那个指挥者,它把那些复杂的 SQL 构建过程,通过注解封装起来,让你只管关切业务逻辑本身。 最终总结一下,MyBatis 的这些注解,功能单一但用途极广。它们不是用来让数据库跑得慢,也不是用来替换 ORM 框架的。它们就是那几根藏在 SQL 底下的魔术棒,通过管住执行顺序、映射结局集,让复杂的逻辑变得好办。理解这个,你就明白为啥数据库里总能看到 `