首页 > 其他 > 详细

mybatis where 中in的使用

时间:2019-06-27 16:03:40      阅读:353      评论:0      收藏:0      [点我收藏+]

当我们使用mybatis时,在where中会用到 in 如:

where name in (‘Jana‘,‘Tom‘);

我们可以在sql中直接写 name in (‘Jana‘,‘Tom‘) 或者 name in (${names})  (备注:String names = "‘Jana‘,‘Tom‘"; 使用$时会引起sql注入安全问题)

但是我们无法在sql中直接写 name in (#{names});

会报参数个数错误,因为‘Jana‘,‘Tom‘会被解析成两个传参

String[] names={"Jana","Tom"};

此时要用foreach函数:

 

name in
<foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
    #{name}
</foreach>

 

解析为:

name in (?,?),然后利用names传入参数

关于参数的形式,可以是数组形式可以是List形式:

1.当只传入names变量时,collection必须指定array或list类型:

public List<User> findInfos(String[] names);
<select id="findInfos" resultMap="UserMap">
    SELECT * FROM t_user
    WHERE id IN
    <foreach collection="array" item="name" index="index" open="(" close=")" separator=",">
      #{name}
    </foreach>
</select>
public List<User> findInfos(List<String> names);
<select id="findInfos" resultMap="UserMap">
    SELECT * FROM t_user
    WHERE id IN
    <foreach collection="list" item="name" index="index" open="(" close=")" separator=",">
      #{name}
    </foreach>
</select>

 

2.当有其他变量时,利用map传入参数集时,可以直接将变量写在collection中

Map<String,Object> params = new HashMap<>();
params.put("class",class);
params.put("names",names);
<select id="findInfos" resultMap="UserMap">
    SELECT * FROM t_user
    WHERE id IN
    <foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
      #{name}
    </foreach>
</select>

 

mybatis where 中in的使用

原文:https://www.cnblogs.com/blog-yuesheng521/p/11097222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!