为什么大家都用 MyBatis,我写完第一个 JDBC 项目之后懂了
学 Java 持久层的时候我先写了一个纯 JDBC 的小项目。写完之后只有一个感受太累了。后来换了 MyBatis 重写一遍同样的功能代码量直接砍了一半多。这篇就记一下 MyBatis 到底比 JDBC 好在哪都是我自己踩过的坑。一、JDBC 那些重复代码真的写到烦先说说 JDBC 写起来有多啰嗦。一个简单的查询用户功能你得干这些事加载数据库驱动获取连接创建 PreparedStatement手动给占位符设参数执行查询遍历 ResultSet一行一行取数据把数据塞到 Java 对象里关闭 ResultSet、Statement、Connection中间任何一步出错了还得处理异常这里面有一半以上的代码跟业务逻辑没有任何关系。你只是想查一个用户的信息结果写了几十行样板代码。而且每次查询都要写一遍复制粘贴改改就完事。我第一个 JDBC 项目光是关闭资源的try-catch-finally就写了不知道多少遍。后来才知道这种重复代码有个说法叫模板代码。MyBatis 把这些事全包了你只管写 SQL连接怎么开、怎么关、结果集怎么遍历它来处理。二、SQL 写在 Java 代码里看着就头疼JDBC 还有一个让我难受的地方SQL 是字符串硬编码在 Java 代码里。比如一个带条件的查询StringsqlSELECT id, username, email FROM user WHERE username ? AND status ?;简单查询还行一旦 SQL 复杂起来十几个条件、好几个 JOIN字符串拼起来又长又难看。而且你想改一下 SQL得改 Java 代码改完还得重新编译打包。MyBatis 把 SQL 抽出来放到 XML 文件里也可以用注解但复杂 SQL 还是 XML 看着清楚。Java 代码里只写一个接口方法SQL 写在对应的 XML 文件里。两边各管各的互不干扰。这样做的好处是改 SQL 不用动 Java 代码DBA 想审查你的 SQL 也方便直接看 XML 文件就行。我后来在团队项目里见过有人直接在 Java 里写几百行的 SQL 字符串说实话看的时候真的很崩溃。三、动态 SQL这个我最开始搞不明白实际开发里查询条件经常是不固定的。比如一个搜索页面用户可以填用户名也可以不填可以选状态也可以不选。SQL 里的 WHERE 条件要根据传进来的参数动态生成。用 JDBC 的话你得在 Java 代码里拼字符串。大概就是这样的逻辑StringsqlSELECT * FROM user WHERE 11;if(username!null){sql AND username ?;}if(status!null){sql AND status ?;}WHERE 11这种写法我以前以为是什么黑魔法后来才明白就是为了拼字符串方便。但这种方式很容易出错少一个空格、多一个 ANDSQL 就挂了而且报的错还不好排查。MyBatis 提供了一套 XML 标签来处理动态 SQLif条件满足就拼上这段choose/when/otherwise相当于 if-elsewhere自动处理 WHERE 后面多余的 AND 或 ORforeach批量处理比如 IN 查询写出来大概是这样selectidfindUsersresultTypeUserSELECT * FROM userwhereiftestusername ! nullAND username #{username}/ififteststatus ! nullAND status #{status}/if/where/select第一次看这段 XML 的时候觉得有点怪用了两天就习惯了。比起在 Java 里拼字符串这个写起来清楚太多了而且不用担心WHERE 11那种问题where标签会自动处理。还有一个sql标签可以定义 SQL 片段其他地方直接include引用省得同一段 SQL 到处复制。四、结果集映射终于不用一行一行 set 了JDBC 查完数据之后你要自己遍历 ResultSet一行一行取字段然后手动 set 到 Java 对象里while(rs.next()){UserusernewUser();user.setId(rs.getInt(id));user.setUsername(rs.getString(username));user.setEmail(rs.getString(email));// ... 还有很多字段}字段少的时候还好字段多了就是一场噩梦。而且一旦数据库表加了字段Java 这边也得跟着改很容易漏掉。MyBatis 可以自动把查询结果映射到 Java 对象上。简单的情况字段名和属性名一样它直接就映射了什么都不用配。复杂一点的情况用resultMap标签定义一下映射关系就行。resultMapiduserResultMaptypeUseridpropertyidcolumnid/resultpropertyusernamecolumnuser_name/resultpropertyemailcolumnemail//resultMap数据库字段叫user_nameJava 属性叫username在 resultMap 里对应一下就行了。如果是一对多关系比如一个用户有多条订单MyBatis 也有对应的标签可以处理不用自己写循环去组装。我第一次用的时候觉得这也太方便了JDBC 里这种事要写一堆代码。五、换数据库基本不用改代码MyBatis 底层还是用 JDBC 连数据库的所以 JDBC 支持的数据库它都支持。MySQL、Oracle、PostgreSQL换个数据库驱动、改一下连接配置基本就能跑。这一点在我刚学的时候感受不深因为一直用 MySQL。后来有个项目要从 MySQL 迁移到 PostgreSQL除了个别 SQL 语法不一样比如分页的写法MyBatis 的配置和 Java 代码完全不用动。如果用的是 JDBC改动量会大很多。另外 MyBatis 跟 Spring 的集成也很顺滑。Spring 帮你管数据源、管事务MyBatis 帮你管 SQL 和映射各干各的活。实际项目里基本都是这么搭配的配一次之后就不用再操心了。最后说了这么多其实 MyBatis 解决的核心问题就一个让你不用把时间浪费在 JDBC 那些重复的样板代码上。连接管理它帮你做了结果集映射它帮你做了动态 SQL 它给你一套标签SQL 和代码分离它给你 XML 文件。你剩下的事情就是两样写 SQL写业务逻辑。如果你是新手建议先老老实实用 JDBC 写一个小项目把那些痛苦都体验一遍。然后再切到 MyBatis你会知道它到底帮你省了多少事。没经历过 JDBC 的苦就很难理解 MyBatis 的好。

相关新闻

粒子生命模拟:用简单规则创造复杂世界的奇妙之旅

粒子生命模拟:用简单规则创造复杂世界的奇妙之旅

粒子生命模拟:用简单规则创造复杂世界的奇妙之旅 【免费下载链接】particle-life A simple program to simulate artificial life using attraction/reuplsion forces between many particles 项目地址: https://gitcode.com/gh_mirrors/pa/particle-life 你…

2026/6/22 23:45:32阅读更多 →
深度剖析Java面试题:反射、注解与动态代理

深度剖析Java面试题:反射、注解与动态代理

在Java面试中,反射、注解与动态代理是高频考点,它们不仅是理解Java核心技术的关键,也是构建灵活、可扩展系统的基础。掌握这些概念,不仅能帮助你应对面试,还能提升你的编程能力。一、反射:揭开类的神秘面纱…

2026/6/22 23:45:32阅读更多 →
SpringBoot与数据库整合:实现高效数据访问

SpringBoot与数据库整合:实现高效数据访问

在现代软件开发中,高效的数据访问是构建稳定、可扩展应用的关键。SpringBoot凭借其自动配置和约定优于配置的理念,极大简化了数据库整合的复杂性。本文将深入探讨如何通过SpringBoot实现与数据库的高效连接,并结合实际案例展示其优势。一、Sp…

2026/6/22 23:45:32阅读更多 →
别再混着用了:agent 和 workflow 到底有什么区别?

别再混着用了:agent 和 workflow 到底有什么区别?

基本概念workflow 是什么说白了,它像流水线。第一步做什么,第二步做什么,什么条件走哪个分支,基本都是提前写死的。它不会自己思考,也不会临场发挥,只会按规则执行比如一个很常见的自动化流程:1…

2026/6/23 1:11:09阅读更多 →
理解 LLM 的无状态架构:从原理到实践

理解 LLM 的无状态架构:从原理到实践

TL;DR — LLM API 本质是无状态 HTTP 调用。每次请求都是独立的,模型不记得你上一轮说了什么。"记忆"是我们在客户端手动拼接 chatHistory 伪造出来的。本文从架构原理出发,结合可运行 Demo,层层递进地讲清楚这件事。📡…

2026/6/23 1:11:09阅读更多 →
Tailwind CSS 4.2 的真正变化:它正在把一部分前端基础设施直接做进框架

Tailwind CSS 4.2 的真正变化:它正在把一部分前端基础设施直接做进框架

官方 Webpack 插件:把配置复杂度收回到框架内部 在很多项目里,Tailwind 并不是单独运行的。 常见的组合通常是:Webpack 或 Vite 负责打包,PostCSS 负责处理 CSS,再通过 Tailwind 插件扫描模板并生成样式。整个流程能…

2026/6/23 1:11:09阅读更多 →
5个实战技巧:快速掌握awesome-math数学资源宝库的完整指南

5个实战技巧:快速掌握awesome-math数学资源宝库的完整指南

5个实战技巧:快速掌握awesome-math数学资源宝库的完整指南 【免费下载链接】awesome-math A curated list of awesome mathematics resources 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-math 在数学学习的道路上,你是否曾经面临…

2026/6/23 1:11:09阅读更多 →
5分钟快速上手:yuzu Switch模拟器零基础完整教程

5分钟快速上手:yuzu Switch模拟器零基础完整教程

5分钟快速上手:yuzu Switch模拟器零基础完整教程 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款功能强大的开源任天堂Switch模拟器,让你能够在Windows、Linux和Android设备上免费…

2026/6/23 1:11:09阅读更多 →
Linux网络配置与文件下载实验报告

Linux网络配置与文件下载实验报告

一、实验目的本次实验是Linux操作系统课程的网络部分实操练习,旨在通过具体任务掌握Linux系统下的网络管理与文件下载方法。二、实验环境本次实验在VMware Workstation虚拟机环境中进行,具体配置如下:操作系统:CentOS 7 x86_64网络…

2026/6/23 1:06:09阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →