MyBatis中的两种参数传递类型详解(示例代码)

 更新时间:2025年12月02日 12:00:23   作者:SadSunset  
文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安全性较差,@Param注解或POJO方式类型安全、可读性强,具体哪种方式好用,一起跟随小编学习下吧

以下是 MyBatis 中传递多个参数的两种主要方式

✅ 方式一:使用Map<String, Object>

List<User> search(Map<String, Object> params);
  • 优点:灵活,适合动态、不固定的参数(如高级搜索)。
  • 缺点:无编译期检查,key 容易拼错,可读性差,难维护。
  • 适用:参数多变、临时性场景。
  • 使用场景
    场景一:动态查询条件较多且不固定
    当你需要构建一个“高级搜索”功能,用户可以任意组合多个筛选条件(比如按姓名、年龄范围、城市、状态等),而且这些条件不是固定的(可能今天加一个字段,明天去掉另一个),这时候用 POJO 反而显得笨重。
    场景二:批量操作需要传递多个不同类型的参数
    例如,你想根据一组 ID 删除记录,同时记录操作人和操作时间:
    场景三:调用存储过程或复杂 SQL,参数结构不规则
    有些老系统或 DBA 写的存储过程,入参可能是几十个零散字段,且没有对应的业务对象。此时用 Map 传参更方便。

✅ 方式二:使用@Param注解(或封装 POJO)(推荐)

// 多个参数用 @Param
List<User> search(@Param("name") String name, @Param("age") Integer age);
// 或封装成 POJO(推荐结构稳定时用)
List<User> search(UserQuery query);
  • 优点:类型安全、IDE 支持、可读性强、易于校验(如 @Valid)。
  • 缺点:参数多时方法签名冗长(若不用 POJO);POJO 需额外定义。
  • 适用:参数固定、语义清晰、长期维护的业务逻辑。
  • **使用场景:**除了上面使用Map的情况,大部分使用

📌 一句话总结:

动态/临时用 Map,固定/正式用 @Param 或 POJO。
能用对象就别用 Map —— 代码是给人看的。
在 MyBatis 中,Mapper 接口的方法参数通常有以下几种方式:

  • 单个基本类型(如 int, String
  • Java Bean(POJO)
  • @Param 注解标注多个参数
  • Map<String, Object>

而 使用 Map 作为参数,通常适用于以下几种典型场景:

Map 是“灵活性”的工具,但牺牲了“可读性”和“安全性”。只在真正需要动态、多变参数时才用它。

到此这篇关于MyBatis中的两种参数传递类型的文章就介绍到这了,更多相关mybatis参数传递类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis打印SQL,并显示参数的实例

    mybatis打印SQL,并显示参数的实例

    这篇文章主要介绍了mybatis打印SQL,并显示参数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解

    这篇文章主要介绍了Java使用agent实现main方法之前的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • java使用软引用实现缓存机制示例

    java使用软引用实现缓存机制示例

    这篇文章主要为大家介绍了java使用软引用实现缓存机制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 使用Java实现大小写转换实例代码

    使用Java实现大小写转换实例代码

    最近在开发项目中遇到一个比较好用的方法,那就是对字符串中的字母大小进行转换,所以下面这篇文章主要给大家介绍了关于如何使用Java实现大小写转换的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java对接ansible自动运维化平台方式

    Java对接ansible自动运维化平台方式

    这篇文章主要介绍了Java对接ansible自动运维化平台方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 解决springboot集成rocketmq关于tag的坑

    解决springboot集成rocketmq关于tag的坑

    这篇文章主要介绍了解决springboot集成rocketmq关于tag的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • idea集成shell运行环境以及shell输出中文乱码的解决

    idea集成shell运行环境以及shell输出中文乱码的解决

    这篇文章主要介绍了idea集成shell运行环境以及shell输出中文乱码的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java ThreadLocal线程局部变量常用方法使用场景示例详解

    java ThreadLocal线程局部变量常用方法使用场景示例详解

    这篇文章主要介绍了为大家java ThreadLocal线程局部变量常用方法使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题

    解决IDEA错误 Cause: java.sql.SQLException: The server time zone

    这篇文章主要介绍了解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot源码 PropertySource解析

    SpringBoot源码 PropertySource解析

    PropertySource是spring中对于键值属性的一种抽象,主要是name和sourcePropertyResolver是对PropertySource提供对外的统一数据处理,对于占位符的处理委托于PropertyPlaceholderHelper,对Springboot 源码 PropertySource相关知识感兴趣的朋友一起看看吧
    2023-01-01

最新评论