MyBatis中的 10 个宝藏技巧!

前言 说到 MyBatis,很多小伙伴都会用,但未必用得“惊艳”。 实际上,这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。 如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。 今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。

  1. 灵活使用动态 SQL

很多小伙伴在写 SQL 的时候,喜欢直接用拼接字符串的方式,比如: String sql = "SELECT * FROM user WHERE 1=1";if (name != null) { sql += " AND name = '" + name + "'";} 这种写法不仅麻烦,而且安全性很差(容易引发 SQL 注入)。 MyBatis 的动态 SQL 是专门为解决这种问题设计的,你可以用 if、choose、foreach 等标签来动态构造 SQL。

示例:动态条件查询 SELECT * FROM user WHERE 1=1 AND name = #{name} AND age = #{age} 这个代码的好处是,SQL 逻辑清晰,不会因为某个参数为空就导致整个 SQL 报错。 ​ 顺便吆喝一声,民族企业[color=rgb(54, 115, 254) !important]机会,前、后端/测试缺人,待遇给的还可以哦~ [color=rgb(54, 115, 254) !important]​

2. 善用 resultMap 自定义结果映射 有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如 user_name 对应 userName。如果直接用默认的 resultType,MyBatis 是无法自动映射的。 这个时候,用 resultMap 就能完美解决。 示例:自定义结果映射 SELECT id, user_name, age FROM user WHERE id = #{id} 有了 resultMap,再复杂的字段映射都可以轻松搞定。

3. 利用 foreach 实现批量操作 有些小伙伴可能会遇到这种需求:传入一个 ID 列表,查询所有匹配的用户信息。如果用拼接字符串的方式生成 IN 条件,不但代码丑,还容易踩坑。 MyBatis 提供了 foreach 标签,可以优雅地处理这种场景。 示例:批量查询 SELECT * FROM user WHERE id IN #{id} 传入的 idList 是一个 List 或数组,MyBatis 会自动帮你展开为 IN (1, 2, 3) 这样的格式,完全不用担心语法问题。

4. MyBatis-Plus 的分页功能 很多小伙伴在做分页的时候,习惯自己写 LIMIT 的 SQL,这样不仅麻烦,还容易出错。 其实,用 MyBatis-Plus 的分页插件能省不少事。 示例:MyBatis-Plus 分页功能 Page page = new Page<>(1, 10); // 第 1 页,每页 10 条IPage userPage = userMapper.selectPage(page, null);System.out.println("总记录数:" + userPage.getTotal());System.out.println("当前页数据:" + userPage.getRecords()); 只需引入分页插件,就能轻松完成分页操作,简直不要太爽。

5. 使用 @Mapper的接口代理 有些小伙伴觉得 XML 文件太多太麻烦,其实 MyBatis 支持纯注解的开发模式,尤其是对于简单的 SQL,非常方便。 示例:注解方式查询 @Mapperpublic interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User getUserById(int id); @Insert("INSERT INTO user(name, age) VALUES(a class="linkToSearch" target="_blank" href="/platform/searchResult?k=%23%7Bname%7D%2C%26nbsp%3B%23&c=2" style="color:rgb(24,113,255);font-weight:600;padding:0 5px">#{name}, #{age})") void addUser(User user);} 用这种方式,可以完全省掉 XML 配置,代码更加简洁。

6. 二级缓存 MyBatis 内置了一级缓存(SqlSession 范围内),但对于多次查询的场景,可以开启二级缓存来提升性能。 示例:开启二级缓存 SELECT * FROM user WHERE id = #{id} 开启二级缓存后,同一个 Mapper 下的查询会自动命中缓存,大幅提高性能。

总结 MyBatis 的魅力在于简单、高效,但很多时候我们用得太“基础”,没有发挥它的全部潜力。 希望这 些技巧能帮你更高效地使用 MyBatis,也让你的代码看起来更“惊艳”。 如果觉得有帮助,记得收藏分享!

最后说一句 如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下我的同名公众号:苏三说技术,您的支持是我坚持写作最大的动力。 求一键三连:点赞、转发、在看。 ——转载自:苏三说技术

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
鱼友7295
作者分享
GitHub Trending周报:Claude Code生态大爆发,这些项目值得收藏 每周一,我都会刷一遍GitHub Trending,看看这一周又有什么新东西。 这一周的关键词就一个:Claude Code生态。 从mattpocock/skills到free-claude-code,从GitNexus到Beads,整个GitHub Trending几乎被Claude Code相关的项目承包了。 今天就给大家梳理一下这周最值得关注的几个项目。 1. mattpocock/skills(23.5K⭐)—— Claude Code实战技能库 这是本周Star增长最快的项目之一,由Vercel前员工mattpocock维护。 这个项目的核心价值是:他把自己在实际项目中使用Claude Code的经验整理成了一套"技能脚本"。 包含的内容很实用: Git操作:自动生成commit信息、智能处理merge冲突 代码审查:自动review代码、生成改进建议 测试生成:根据代码自动生成单元测试 文档撰写:自动生成README和技术文档 这些脚本不是"玩具",而是可以直接用到生产环境的实战工具。 对于刚上手Claude Code的开发者来说,这套技能库能帮你快速建立正确的工作流。 顺嘴提一句,技术大厂,前后端-测试机会,全国一线及双一线城市均有坑位(https://jsj.top/f/o38ijj),待遇和稳定性还不错,感兴趣看看。 2. Alishahryar1/free-claude-code(13.5K⭐)—— 免费的Claude Code方案 本周涨势最猛的项目之一,一天涨了7000+ Star。 这个项目解决了一个很现实的问题:Claude Code要钱,Copilot也涨价了,有没有免费的替代方案? 它提供了一套在终端、VSCode、甚至Discord里使用Claude Code的方案,完全免费。 适合人群:学生党、个人开发者、想尝鲜但不想花钱的程序员。 不过要注意,免费方案可能有稳定性风险,生产环境还是建议用官方版本。 3. abhigyanpatwari/GitNexus(30K⭐)—— 浏览器里的代码知识图谱 这个项目的创新点很有意思: 不需要服务器、不需要安装任何软件,直接在浏览器里生成整个代码库的知识图谱。 你只需要拖一个GitHub仓库进去,它就会自动分析代码结构、依赖关系、函数调用链…… 然后给你生成一张交互式的知识图谱。 对于接手老项目的开发者来说,这个工具简直是神器。 你不再需要花几天时间读代码,只需要看看这张图,就能快速理解整个项目的结构。 4. gastownhall/beads(新增项目)—— 给AI Agent装"记忆" 这是本周新上榜的项目,关注度很高。 核心功能:解决AI Agent的"金鱼记忆"问题。 用过Claude Code的朋友应该知道,它每次对话都是从零开始,不记得之前聊过什么。 Beads通过在代码仓库中插入结构化的"记忆文件",让Claude Code能够跨会话记住重要的上下文。 比如你定义了一个API版本同步规则,下次对话时Claude Code就能自动应用这个规则。 这个思路很有意思,为AI Agent的长期记忆提供了新的解决方案。 总结 这一周的GitHub Trending,释放了一个很明确的信号: Claude Code生态正在快速成熟。 从技能库到免费方案,从知识图谱到长期记忆,开发者们正在围绕Claude Code构建完整的工具链。 如果你还没开始用Claude Code,建议从mattpocock/skills开始,先学习正确的工作流。 如果你已经在用Claude Code,那GitNexus和Beads这两个项目值得你花时间研究。 AI编程工具的时代已经来了,你准备好了吗?
3
OD入职半年,聊聊我的真实体验和建议 本人普通二本院校,去年秋招拿了几个offer,最后选了OD后端开发。入职半年多了,来发个帖分享一下真实感受,给大家一个参考。 为什么选 OD 秋招的时候拿了几个offer,有中厂的正式offer,也有OD的。最后选OD的原因: 平台大:想第一份工作去个大平台,见见世面 技术成长:面试的时候和面试官聊得挺好,感觉团队技术不错 待遇还可以:综合下来不比中厂正式差多少 面试流程快:从一面到拿offer不到一个月,不用一直等 当时也搜了很多关于OD的帖子,什么说法都有,越看越纠结。最后决定:反正还年轻,试错成本低,去了不行再跳呗。 入职体验 新人培训 入职后有为期两周的新人培训,不是走过场那种,是真的有东西学: 公司文化和价值观(这个听听就好) 技术栈培训(语言、框架、内部工具) 业务背景介绍 安全合规培训 培训完还有考试…不过不难,认真听都能过。 团队氛围 这个必须重点说!分到的组氛围真的超好: mentor 是个工作三年的老哥,人特别耐心,我问的傻问题都认真答 leader 不卷,到点就催大家下班(真的!) 组里每周有技术分享,每月有团建 同事们都很好相处,没有勾心斗角那一套 OD身份这个事,组里没人提,大家都是一起干活的。至少在我们组,完全感受不到区别。 工作内容 我做的是后端开发,工作内容和正式员工没区别: 需求评审、技术方案设计 编码、单元测试、code review 发布、线上问题排查 技术调研、方案优化 成长速度确实快,半年时间学到的东西比大学四年加起来都多(不是说大学没用,是实战和上课真的不一样)。 大家最关心的几个问题 Q1:OD和正式员工到底有什么区别? A:合同主体不同,这个是本质区别。日常工作层面,至少我的体验是没差别的。一样的工作内容、一样的办公环境、一样的培训福利。 Q2:会不会被歧视? A:至少我没遇到过。组里没人会特意问你是什么身份,大家都是干活的。当然不排除个别组有这种情况,但我觉得是少数。 Q3:加班多吗? A:看组看项目。我们组一般是正常下班,项目上线前会忙一阵。没有996那么夸张,但也不是完全不加班。 Q4:食堂怎么样? A:这个必须吹一波!三餐免费,种类很多,味道也不错。入职半年胖了五斤… Q5:适合应届生去吗? A:个人觉得适合。第一份工作,平台和成长比什么都重要。大公司的工程体系、项目体量、技术氛围,这些对新人来说都是宝贵的资源。 Q6:以后好跳槽吗? A:我觉得简历上有大厂项目经验,跳槽的时候是加分的。面试官更关注你做过什么、能力怎么样,而不是你是什么用工模式。当然这个我还没验证过,仅供参考。 一些建议 不要被网上的言论吓退,也不要被洗脑,自己去面一次、和团队聊聊,比什么都真实 选团队很重要,同一个公司不同组的体验天差地别,面试的时候可以主动问问团队情况 技术永远是王道,不管什么身份什么模式,能力到位了就有选择权 第一份工作,成长比钱重要,当然钱也不能太少(狗头) 网上的信息看看就好,每个人情况不一样,不要人云亦云 写在最后 半年多下来,我觉得这个选择不后悔。学到了很多,认识了很多优秀的人,也对互联网行业有了更真实的认知。 OD不是洪水猛兽,也不是什么天上掉馅饼的好事,它就是一个选择而已。适合不适合,只有自己试过才知道。 祝大家都能拿到心仪的offer! 有问题可以在评论区问,知道的都会答~
7
在OD写了两年代码,聊聊技术成长这件事
6
Agent-Reach实测:让AI Agent一键搜索全网,我踩了3个大坑
4
大厂外包一年,说说我的真实感受:没有网上说的那么惨,也没有那么香
9
下载 APP