说明:
(1) 为什么写本篇博客?:mybatis接收多个参数的情况,以前经常遇到,但在写【SpringBoot电商项目商品模块批量上下架商品接口】时,意识到需要好好总结一下;
(2)本篇博客主要参考【Mybatis (ParameterType) 如何传递多个不同类型的参数】,该文的作者是【FantJ】;
(3)本篇博客的几点说明;
● 本篇博客并没有穷举并实测所有的情况(也没必要,这又不是做奥数题…);但能保证的是:本篇博客介绍的,都是普遍使用的策略;而且,本篇博客介绍的方法,基本可以应对所有情况;
● 关于Mybatis多参数传递,在【MyBatis入门六:SQL传参一:SQL传参;(单参数传递【基本包装类型】和多参数传递【Map接口】)】中作过一些介绍:
1.传递一个参数的情况;
(1)不使用@Param注解,使用parameterType=”***”;
(2)使用@Param注解,使用parameterType=”***”; (我觉得,这是最建议的、完美无懈可击的策略)
(3)使用@Param注解,不使用parameterType=”***”;
2.传递多个参数的情况;
(1)不使用@Param注解,不使用parameterType=”***”;
参考自【Mybatis (ParameterType) 如何传递多个不同类型的参数】;(自己并没有实测)
由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始;
(2)使用@Param注解,不使用parameterType=”***”;(这是一种很高效的、被广泛采用的方式)
(3)使用Map封装;
参考自【Mybatis (ParameterType)如何传递多个不同类型的参数】;(自己并没有实测)
其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。
说明:
● 在【MyBatis入门六:SQL传参一:SQL传参;(单参数传递【基本包装类型】和多参数传递【Map接口】)】中作了介绍:
● 关于使用Map接收参数时,是否可以同时使用@Param注解(自己决定是可以的);但是使用了@Param注解后,如何在mapper.xml中获取参数;;关于这一点,自己没有看;;;;(PS:这又不是奥数题,放着更好的策略不采取,为什么看这种比较令人纠结的使用方式嘞?不是自己给自己找麻烦吗~~~) (如果有兴趣,或者需要了,似乎可以参考mybatis集合传参是否用@Param注解的区别)
(4)使用List封装;
参考自【Mybatis (ParameterType)如何传递多个不同类型的参数】;(自己并没有实测)
说明:
● 关于使用List接收参数时,是否可以同时使用@Param注解(自己决定是可以的);但是使用了@Param注解后,如何在mapper.xml中获取参数;;关于这一点,自己没有看;;;;(PS:这又不是奥数题,放着更好的策略不采取,为什么看这种比较令人纠结的使用方式嘞?不是自己给自己找麻烦吗~~~)(如果有兴趣,或者需要了,似乎可以参考mybatis集合传参是否用@Param注解的区别)
传递list和map在资源消耗上肯定远大于方法(1)和方法(2),但是有一些特殊的情形需要传递list,比如你需要传递一个id集合并批量对id进行sql操作然后再返回等等。所以都需要了解。