本文Mybatis版本: 3.4.5
简单数据类型的单参数:(基本类型 + String)
parameterType可省略,且参数名为任意都可。
多参数 : (Map、对象属于本范围而不是单一参数)
-
顺序
无需任何额外处理
使用: 按顺序获取参数
- #{0},#{1} (此版本会报错,原因详见)
- #{arg0} , #{arg1}
- #{param1},#{param2}
拓:
arg和param可以混用,即#{param1} .. # {arg1}是合法的- 源码层面看,最后都是解析成
arg{0~n}
-
Map
parameterType="java.util.Map"使用:
#{key}拓:
parameterType="map也是对的,因为有内置的别名 -
@Param
xxx(@Param("name") String name, @Param("age") int age);写
sql时就可以直接用指定的名字,eg:#{name},不赘述源码层面看其实还是封装成Map,简便易用
附:@Param源码解析(笔者认为这个源码解读有问题,不过用于指导debug思路还是不错的)
-
Java Bean
parameterType="全类名"使用:
#{成员属性}
对比:
- 不推荐使用顺序传参,因为表达不直观,阅读难度大。
@Param和Map是同一种类型。@Param适合变量不多的情况,比较常用Map适合变量较多的情况
- Java Bean适合VO等传参,或类的多个属性都需要的情况
此文中还介绍了JSON、单一集合类型、对象内置集合类型的传参方法,但并不常用,本文就不累赘了。
拓:
${}有sql注入风险,一般使用#{}。
参考资料:
[11、mybatis的映射xml中参数类型的别名](https://www.cnblogs.com/holly8/p/10523592.html)
本文完,有误欢迎指出

本文详细解析MyBatis中不同参数类型(如基本类型、Map、JavaBean)的传递方式,包括使用#{}

4485

被折叠的 条评论
为什么被折叠?



