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参数传递类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nacos-discovery包名层级问题解决

    nacos-discovery包名层级问题解决

    这篇文章主要为大家介绍了nacos-discovery包名层级问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java快速实现短信登录的详细流程

    Java快速实现短信登录的详细流程

    短信登录是基于短信验证码的身份验证方式,在许多网站和应用中被广泛使用,通常被认为比传统的用户名和密码更安全,因为验证码是一次性使用的,且只有用户能够接收到短信,本文给大家介绍了Java快速实现短信登录的详细流程,需要的朋友可以参考下
    2025-08-08
  • JAVA常用API总结与说明

    JAVA常用API总结与说明

    这篇文章主要介绍了JAVA常用API总结与说明,包括JAVA线程常用API,JAVA队列常用API,JAVA泛型集合算法常用API,JAVA并发常用API需要的朋友可以参考下
    2022-12-12
  • Java因项目配置不当而引发的数据泄露

    Java因项目配置不当而引发的数据泄露

    这篇文章主要介绍了Java因项目配置不当而引发的数据泄露解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java实现堆算法的使用示例

    Java实现堆算法的使用示例

    本文主要介绍了Java实现堆算法的使用示例,Java中提供了一个Heap类,可以用来实现堆的操作,可以实现如插入、删除、获取最大最小值等,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java数据结构之链表(动力节点之Java学院整理)

    Java数据结构之链表(动力节点之Java学院整理)

    这篇文章主要介绍了Java数据结构之链表(动力节点之Java学院整理)的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java lambda表达式与泛型整理总结

    Java lambda表达式与泛型整理总结

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名。泛型编程,故如其名,是一个泛化的编程方式。其实现原理为程序员编写一个函数/类的代码示例,让编译器去填补出不同的函数实现
    2022-07-07
  • Mybatis的特点及优点

    Mybatis的特点及优点

    Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。mybatis有哪些特点和优点呢?通过本文一起学习吧
    2016-12-12
  • Java中过滤器、监听器和拦截器的区别详解

    Java中过滤器、监听器和拦截器的区别详解

    这篇文章主要介绍了Java中过滤器、监听器和拦截器的区别详解,有些朋友可能不了解过滤器、监听器和拦截器的区别,本文就来详细讲一下,相信看完你会有所收获,需要的朋友可以参考下
    2024-01-01
  • 使用Thrift实现跨语言RPC的调用

    使用Thrift实现跨语言RPC的调用

    Thrift最大的优势就是可以实现跨语言RPC调用,尤其在一些大厂,微服务各模块之间使用不同的语言是很常见的,本文就将使用java作为服务端,用python作为客户端,实现不同语言之间的RPC调用,需要的可以参考下
    2023-10-10

最新评论