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
。
多参数的传入今天就先聊到这了。。。