mybatis中使用not in与 in的写法说明

使用not in与 in的写法

首先声明我不是很喜欢用foreach,所以我的代码中很少出现foreach。不废话了,上代码:

in的用法

我的id是Long类型的

service方法,有一个Long的集合:

public List listByPackageId(List ids, String systemCode) {
    Map map = new HashMap();
    if(ids.size()!=0) {
        StringBuilder sbd = new StringBuilder();
        for(Long cateIds:ids){
            sbd.append(cateIds+",");
        }
        String idStr = sbd.toString();
        idStr = idStr.substring(0,idStr.length()-1);
        map.put("ids", idStr);
    }

实体类.xml

select * from xxx where 
 FIND_IN_SET(id,#{ids})   

not in的用法

service方法,有一个Long的集合:

public List listByPackageId(List ids, String systemCode) {
    Map map = new HashMap();
    if(ids.size()!=0) {
        StringBuilder sbd = new StringBuilder();
        for(Long cateIds:ids){
            sbd.append(cateIds+",");
        }
        String idStr = sbd.toString();
        idStr = idStr.substring(0,idStr.length()-1);
        map.put("notids", idStr);
    }

实体类.xml

select * from xxx where 
 NOT FIND_IN_SET(id,#{notids})   

使用in查询时的注意事项

当查询的参数只有一个时 

findByIds(List ids)

a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list

  
 findByIds(Long[] ids)

b 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

  

当查询的参数有多个时

例如 findByIds(String name, Long[] ids) 

这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称 

下面是一个示例

         Map params = new HashMap(2);
        params.put("name", name);
         params.put("ids", ids);
        mapper.findByIdsMap(params);
 
  

完整的示例如下:

例如有一个查询功能,Mapper接口文件定义如下方法:

List findByIds(Long... ids);

使用 in 查询的sql拼装方法如下:

  

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

你可能感兴趣的:(mybatis中使用not in与 in的写法说明)