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

相关文章

  • 简单的java读取文件示例分享

    简单的java读取文件示例分享

    这篇文章主要介绍了java读取txt文件内容,示例很简单,代码里有注释,大家直接看代码吧
    2014-01-01
  • Kotlin基本类型自动装箱出现问题解决办法

    Kotlin基本类型自动装箱出现问题解决办法

    这篇文章主要介绍了Kotlin基本类型自动装箱出现问题解决办法的相关资料,希望通过本文能帮助到大家,让大家遇到这样的问题顺利解决,需要的朋友可以参考下
    2017-10-10
  • 在Spring Boot中集成RabbitMQ的实战记录

    在Spring Boot中集成RabbitMQ的实战记录

    本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(适合复杂路由)和注解绑定(适合快速开发),感兴趣的朋友跟随小编一起看看吧
    2025-06-06
  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java中DTO与Entity拷贝转换的方法小结

    Java中DTO与Entity拷贝转换的方法小结

    在 Java 开发中,DTO(Data Transfer Object)和 Entity(实体类)是常见的两种数据模型,本文将介绍几种常见的工具类和自定义方式来实现这种转换,感兴趣的可以了解下
    2025-02-02
  • 详解如何热更新线上的Java服务器代码

    详解如何热更新线上的Java服务器代码

    这篇文章主要介绍了详解如何热更新线上的Java服务器代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 老生常谈 MyBatis 复杂查询

    老生常谈 MyBatis 复杂查询

    这篇文章主要介绍了 MyBatis 复杂查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 实例详解Java调用第三方接口方法

    实例详解Java调用第三方接口方法

    很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等),下面这篇文章主要给大家介绍了关于Java调用第三方接口方法的相关资料,需要的朋友可以参考下
    2022-06-06
  • IDEA中调用方法时,如何同步显示方法的注释信息

    IDEA中调用方法时,如何同步显示方法的注释信息

    这篇文章主要介绍了IDEA中调用方法时,如何同步显示方法的注释信息问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • MyBatisPlus中使用or()和and()遇到的问题及细节处理

    MyBatisPlus中使用or()和and()遇到的问题及细节处理

    这篇文章主要介绍了MyBatisPlus中使用or()和and()遇到的问题,本文通过多种写法实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论