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

2025-12-02 18:50

本文主要是介绍MyBatis中的两种参数传递类型详解(示例代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安...

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

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

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

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

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

一句话总结:

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

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

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

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

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

这篇关于MyBatis中的两种参数传递类型详解(示例代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156331

相关文章

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造