平常我们使用in语句查询时,都是 in (xx,xx,xx)的格式,但是mybatis如何用in语句查询呢,我们可以用foreach元素去创建这样的格式。显然foreach元素是一个循环语句,它的作用是遍历集合,支持遍历数据,List,set接口的集合。
我们查询用户表,用户有男,女,未知3种情况,那例子查询男和未知的用户
select * from t_user where sex in
item="item" index="index" collection="sexList" open="(" separator="," close=")">#{item}
属性说明:
1.collection:从外面传入进来参数的名称 #{sexLists},可以是数组,集合等
2.item:当前遍历到的元素
3.index:当前元素在集合的下标
4.open和close就是用什么符号包起来这些元素 我们要用”( )”
5.separator:用什么符号分割这些元素 我们要用”,”
注意 对于collection属性由于有数组,集合的区别,所以根据传参的个数有区别
1.当查询的参数只有一个时
findByIds(List<Long> ids)
a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
Select
refid="Base_Column_List" > from jria where ID in
item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
b 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
select
refid="Base_Column_List" > from jria where ID in
item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
2.当查询的参数有多个时
当查询的参数有多个时,有三种方式可以实现,一种是使用@Param(“xxx”)进行参数绑定,另一种可以通过Map来传参数。
@Param(“xxx”)方式
List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);
<select id="selectByIdSet" resultMap="Map">
SELECT
*
from t_user
WHERE name=#{name,jdbcType=VARCHAR} and id IN
<foreach collection="idList" item="item" index="index"
open="(" close=")" separator=",">
#{item}
foreach>
select>
Map方式
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);
<select id="selectByIdSet" resultMap="Map" parameterType="Map">
select
*
from t_user where
name = #{name}
and ID in
<foreach item="item" index="index" collection="idList" open="(" separator="," close=")">
#{item}
foreach>
select>
bean方式
这时候的bean的属性是要数组的,不能数集合
public class Dag{
private int[] ageArray;
private String name;
//set,get方法
}
<select id="selectByIdSet" resultMap="Map" parameterType="com.nonelonely.Dog">
select *
from t_dog
name = #{name}
and t.age in
<foreach item="item" index="index" collection="ageArray" open="(" separator="," close=")">
#{item}
foreach>
select>
原创来源:滴一盘技术