当前位置: 代码网 > it编程>编程语言>Java > MyBatis 参数绑定的具体实现

MyBatis 参数绑定的具体实现

2026年01月26日 Java 我要评论
一、mybatis 参数绑定机制1.1 核心概念当 mapper 接口方法接收多个参数时,mybatis 提供三种参数绑定方式:默认参数名:arg0、arg1(java 8+)或 param1、par

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com