导读


由于项目需要,现在需要查询一个List集合中的数据不在表中某个字段不存在的数据,并将其查询出来。

使用


原因

由于项目需要,现在需要查询一个List集合中的数据不在表中某个字段不存在的数据,并将其查询出来。

举例:

  • 集合List

    1. List list = new ArrayList();
    2. list.add("小明");
    3. list.add("小张");
    4. list.add("小丽");
    5. list.add("小鸡");
    6. list.add("小猪");
    7. list.add("小二");
  • 用户表user

id name age
1 小明 19
2 小丽 21
3 张三 31
4 小李 24
5 王二 34

解决方法

组装成一个临时表:将集合中的所有元素拼成一个临时表,然后使用not in,查找数据库表内所有不在临时表中的数据。

Mybatis结构如下:

  1. <where>
  2. <if test="set != null and set.size != 0">
  3. select v.userName FROM
  4. <foreach collection="userList" item="item" separator="union" open="(" close=")">
  5. select #{item} as userName
  6. </foreach>
  7. v where v.userName not IN (select xx from table where xxxx='****')
  8. </if>
  9. </where>
  • table:表名
  • xxxx=’**‘:条件,这里可以是

例子:

  1. <where>
  2. <if test="set != null and set.size != 0">
  3. select v.userName FROM
  4. <foreach collection="userList" item="item" separator="union" open="(" close=")">
  5. select #{item} as userName
  6. </foreach>
  7. v where v.userName not IN (select name from user where age>20);
  8. </if>
  9. </where>

END