说明:

(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) 如何传递多个不同类型的参数】;(自己并没有实测)

 
     public List<XXXBean> getXXXBeanList(String xxId, String xxCode);
 
 
     <select id="getXXXBeanList" resultType="XXBean"
 
       select t.* from tableName where id = #{0} and name = #{1}
 
     </select>

由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始;


(2)使用@Param注解,不使用parameterType=”***”;(这是一种很高效的、被广泛采用的方式)


(3)使用Map封装;

参考自【Mybatis (ParameterType)如何传递多个不同类型的参数】;(自己并没有实测)

     public List<XXXBean getXXXBeanList(HashMap map);
 
 
     <select id="getXXXBeanList" parameterType="java.util.Map" resultType="XXBean"
 
       select 字段... from XXX where id=#{xxId} code = #{xxCode}
 
     </select>

其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。

说明:

● 在【MyBatis入门六:SQL传参一:SQL传参;(单参数传递【基本包装类型】和多参数传递【Map接口】)】中作了介绍:

● 关于使用Map接收参数时,是否可以同时使用@Param注解(自己决定是可以的);但是使用了@Param注解后,如何在mapper.xml中获取参数;;关于这一点,自己没有看;;;;(PS:这又不是奥数题,放着更好的策略不采取,为什么看这种比较令人纠结的使用方式嘞?不是自己给自己找麻烦吗~~~) (如果有兴趣,或者需要了,似乎可以参考mybatis集合传参是否用@Param注解的区别


(4)使用List封装;

参考自【Mybatis (ParameterType)如何传递多个不同类型的参数】;(自己并没有实测)

 
     public List<XXXBean> getXXXBeanList(List<String> list);
 
 
 
     <select id="getXXXBeanList" parameterType="java.util.List" resultType="XXBean"
       select 字段... from XXX where id in
       <foreach item="item" index="index" collection="list" open="("separator="," close=")"
         #{item}
       </foreach>
     </select>

说明:

● 关于使用List接收参数时,是否可以同时使用@Param注解(自己决定是可以的);但是使用了@Param注解后,如何在mapper.xml中获取参数;;关于这一点,自己没有看;;;;(PS:这又不是奥数题,放着更好的策略不采取,为什么看这种比较令人纠结的使用方式嘞?不是自己给自己找麻烦吗~~~)(如果有兴趣,或者需要了,似乎可以参考mybatis集合传参是否用@Param注解的区别


传递list和map在资源消耗上肯定远大于方法(1)和方法(2),但是有一些特殊的情形需要传递list,比如你需要传递一个id集合并批量对id进行sql操作然后再返回等等。所以都需要了解。