MyBatis 参数绑定的具体实现

 更新时间:2026年01月26日 09:43:36   作者:Yrui.  
本文主要介绍了MyBatis 参数绑定的具体实现,包括默认参数名、@Param注解和POJO/DTO对象三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、MyBatis 参数绑定机制

1.1 核心概念

当 Mapper 接口方法接收多个参数时,MyBatis 提供三种参数绑定方式:

  • 默认参数名arg0arg1(Java 8+)或 param1param2
  • @Param 注解:显式指定参数名称
  • POJO/DTO 对象:通过对象属性访问(本教程不涉及)

二、arg 参数(参数顺序索引)

2.1 使用场景

适用于没有使用 @Param 注解的情况,通过参数在方法中的顺序位置进行绑定。

2.2 XML 映射示例

<select id="findBySalary2" resultType="Emp">
    SELECT * FROM emp 
    WHERE salary >= #{arg0} AND salary <= #{arg1}
</select>

2.3 Java 接口定义

List<Emp> findBySalary2(Double start, Double end);

2.4 特点

  • 索引从 0 开始
  • 参数顺序敏感(调换参数顺序会导致逻辑错误)
  • 可读性较低(推荐在参数较少时使用)

三、param 参数(自动编号索引)

3.1 使用场景

MyBatis 为每个参数自动生成的别名,编号从 1 开始。

3.2 XML 映射示例

<select id="findBySalary1" resultType="Emp">
    SELECT * FROM emp 
    WHERE salary >= #{param1} AND salary <= #{param2}
</select>

3.3 Java 接口定义

List<Emp> findBySalary1(Double start, Double end);

3.4 特点

  • 索引从 1 开始
  • arg 索引共存(可用两种方式交叉访问)
  • 适用于需要明确位置编号的场景

四、@Param 注解(显式命名参数)

4.1 使用场景

当需要明确参数语义或方法有多个参数时推荐使用。

4.2 XML 映射示例

<select id="findBySalary3" resultType="Emp">
    SELECT * FROM emp 
    WHERE salary >= #{minSalary} AND salary <= #{maxSalary}
</select>

4.3 Java 接口定义

List<Emp> findBySalary3(
    @Param("minSalary") Double start, 
    @Param("maxSalary") Double end
);

4.4 特点

  • 参数名与业务语义强关联
  • 不依赖参数顺序
  • 代码可维护性最佳
  • 支持与 param/arg 方式混用

五、对比总结

方式索引起点顺序敏感性可读性推荐场景
arg0, arg10简单查询(参数<2)
param1, param21需要明确编号的场景
@Param自定义多参数/复杂业务场景

六、综合使用示例

6.1 混合使用场景

<select id="findComplex" resultType="Emp">
    SELECT * FROM emp 
    WHERE 
        salary >= #{min} 
        AND salary <= #{param2} 
        AND name LIKE #{arg2}
</select>

6.2 对应接口

List<Emp> findComplex(
    @Param("min") Double minSalary,
    Double maxSalary, 
    String nameKeyword
);

七、最佳实践建议

  1. 参数超过 2 个时:必须使用 @Param 注解
  2. 涉及范围查询:建议使用 @Param 明确参数语义
  3. 维护性考量:优先选用 @Param 方式
  4. 版本兼容性:注意不同 MyBatis 版本对默认别名的支持差异

到此这篇关于MyBatis 参数绑定的具体实现的文章就介绍到这了,更多相关MyBatis 参数绑定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决SpringBoot使用@Value获取不到yaml中配置值的问题

    解决SpringBoot使用@Value获取不到yaml中配置值的问题

    在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,所以本文给大家详细介绍了SpringBoot使用@Value获取不到yaml中值的问题分析及解决方法,需要的朋友可以参考下
    2024-01-01
  • MyBatis 如何使项目兼容多种数据库的解决方案

    MyBatis 如何使项目兼容多种数据库的解决方案

    要想做兼容多种数据库,那毫无疑问,我们首先得明确我们要兼容哪些数据库,他们的数据库产品名称是什么,本次我们讲解了一套使项目兼容多种数据库的方案,对MyBatis项目兼容多种数据库操作方法感兴趣的朋友一起看看吧
    2024-05-05
  • Java面试题冲刺第十六天--消息队列

    Java面试题冲刺第十六天--消息队列

    这篇文章主要为大家分享了最有价值的三道关于消息队列的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 一招教你使用Java执行groovy脚本的两种方式

    一招教你使用Java执行groovy脚本的两种方式

    本文主要介绍了一招教你使用Java执行groovy脚本的两种方式,一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容,一种是执行groovy脚本,感兴趣的可以了解一下
    2023-09-09
  • Springboot对接mqtt的项目实践

    Springboot对接mqtt的项目实践

    在SpringBoot中对接MQTT协议,可以使用Eclipse Paho客户端和Spring Integration MQTT模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • Android中PreferenceActivity使用详解

    Android中PreferenceActivity使用详解

    本文主要介绍了Android中PreferenceActivity使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java在web页面上的编码解码处理及中文URL乱码解决

    Java在web页面上的编码解码处理及中文URL乱码解决

    这篇文章主要介绍了Java在web页面上的编码解码处理及中文URL乱码解决,文中所介绍的两种使用过滤器解决中文链接乱码的方法非常有效,需要的朋友可以参考下
    2016-02-02
  • SpringBoot 使用Prometheus采集自定义指标数据的方案

    SpringBoot 使用Prometheus采集自定义指标数据的方案

    这篇文章主要介绍了SpringBoot 使用Prometheus采集自定义指标数据,我们在k8s集群成功搭建了Prometheus服务,今天,我们将在springboot2.x中使用prometheus记录指标,需要的朋友可以参考下
    2022-10-10
  • Java方法重写的超详细讲解

    Java方法重写的超详细讲解

    在 Java 编程的精彩世界里,方法重写是一项极为重要且实用的特性,它犹如一把神奇的钥匙,为我们开启了面向对象编程中多态性的大门,今天,就让我们一同深入探索 Java 方法重写的奥秘,感兴趣的小伙伴跟着小编一起来看看吧
    2025-03-03
  • Spring如何通过注解存储和读取对象详解

    Spring如何通过注解存储和读取对象详解

    在Spring中,要想更简单的存储和读取对象的核心是使用注解,这篇文章主要给大家介绍了关于Spring如何通过注解存储和读取对象的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论