mybaties这个框架相信大家都是不怎么陌生了,作为时下最为流行的持久层框架。你对他的使用了解多少?今天我准备对mybaties接收多个参数来做一个讲解。

我将着手于多个不同参数和集合参数两个方面来说:

一、多个不同参数的传入:

1.@Param注解
看下面这个代码:

void addUserIdAndRoleId(@Param("userId") int userId,@Param("roleId")int roleId);

可以通过@param注解来指定key,然后xml或者注解上通过指定的key来获取对应要传入的参数

@Insert("insert into t_user_role values(#{userId},#{roleId})")

上面是通过注解方式获取多个参数,接下来看xml格式获取多个参数

<insert id="addUserIdAndRoleId">
        insert into t_user_role values(#{userId},#{roleId})
    </insert>

与注解方式获取参数方法相同,使用#{key}获取。
2.直接传入参数
看下面这段代码:

void addUserIdAndRoleId( int userId,int roleId);

直接往mybaties传入多个参数,

<insert id="addUserIdAndRoleId">
        insert into t_user_role values(#{param1},#{param2})
    </insert>

对应的xml中可以传入#{param1},#{param2},并根据参数个数依次往后推。

@Insert("insert into t_user_role values(#{param1},#{param2})")

与xml方式获取参数方法相同,使用#{param1}获取,并根据参数个数依次往后推。
3.使用Map集合封装
看下面这段代码:

Map<String,Integer> map = new HashMap<>();
        map.put("userId",userId);
        map.put("roleId",roleId);
        roleDao.addUserIdAndRoleId1(map);

service层实现类定义map集合,将所传参数封装进Map集合,然后传入mybatis

@Insert("insert into t_user_role values(#{userId},#{roleId})")
 void addUserIdAndRoleId1(Map map);

这是注解方式传入map集合

<insert id="addUserIdAndRoleId1" parameterType="map">
        insert into t_user_role values(#{userId},#{roleId})
    </insert>

xml方式传入Map集合,也可以自己封装pojo传入。(推荐)

二、传入集合(数组)参数

1.集合参数
传入这样一个参数:

List<CheckItem> findByIds(List<Integer> checkItemIds);

传入一个list集合

<select id="findByIds"  resultType="com.itcast.pojo.CheckItem">
      select * from t_checkitem where id in
      <foreach collection="list" item="item" open="(" separator="," close=")" 	 index="index">
          #{item}
      </foreach>
 </select>

根据上面的代码可以看出,由于是查询对象集合需要先指定resultType结果类型,写SQL时在传入集合的地方in 后面使用动态sql语句foreach标签,来遍历集合将其放入in关键字的括号中。注意:collection类型必须指定为list,item指定参数, open="(" separator="," close=")" 这三个用来动态拼接括号,与参数间的逗号。index=“index” 指定索引。 最后在标签体内使用#{item} 来获取集合的每一个值,item为自己指定的值
2.数组参数

List<CheckItem> findByIds(Interger[] checkItemIds); //数组参数
 List<CheckItem> findByIds(Interger... checkItemIds); //可变参数

传入数组参数,可变参数本质上就是数组

<select id="findByIds"  resultType="com.itcast.pojo.CheckItem">
      select * from t_checkitem where id in
      <foreach collection="array" item="item" open="(" separator="," close=")" 	 index="index">
          #{item}
      </foreach>
 </select>

传入数组参数和传入集合参数基本一致,唯一的区别:collection类型必须指定为array
多参数的传入今天就先聊到这了。。。