专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
51好读  ›  专栏  ›  芋道源码

MyBatis中的 10 个宝藏技巧!

芋道源码  · 公众号  · Java  · 2025-03-24 09:30

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、 商城 、支付、工作流、大屏报表、微信公众号、 ERP CRM AI 大模型 等等功能:

  • Boot 多模块架构:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 微服务架构:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 双版本

来源:苏三说技术


前言

说到 MyBatis,很多小伙伴都会用,但未必用得“惊艳”。

实际上,这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。

如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。

今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

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 id="findUser" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null and name != ''">
        AND name = #{name}
    if>
    <if test="age != null">
        AND age = #{age}
    if>
select>

这个代码的好处是,SQL 逻辑清晰,不会因为某个参数为空就导致整个 SQL 报错。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

2. 善用 resultMap 自定义结果映射

有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如 user_name 对应 userName 。如果直接用默认的 resultType ,MyBatis 是无法自动映射的。

这个时候,用 resultMap 就能完美解决。

示例:自定义结果映射


    
    
    


<select id="getUserById" resultMap="userResultMap">
    SELECT id, user_name, age FROM user WHERE id = #{id}
select>

有了 resultMap ,再复杂的字段映射都可以轻松搞定。

3. 利用 foreach 实现批量操作

有些小伙伴可能会遇到这种需求:传入一个 ID 列表,查询所有匹配的用户信息。如果用拼接字符串的方式生成 IN 条件,不但代码丑,还容易踩坑。

MyBatis 提供了 foreach 标签,可以优雅地处理这种场景。

示例:批量查询







请到「今天看啥」查看全文