Mybatis plus中使用in查询出错
String uniIds = "1,6,4,8";
return list(new QueryWrapper<University>()
.lambda().in(University::getId, uniIds).eq(University::getEnabled,1));
控制台打印sql:
==> Preparing: SELECT id,name,code,brief,enabled,create_time,mod_time,flag FROM university WHERE flag=0 AND (id IN (?) AND enabled = ?)
==> Parameters: 1,6,4,8(String), 1(Integer)
<== Columns: id, name, code, enabled, create_time, mod_time, flag
<== Row: 1, xxxx大学, 0023, 一条没有简介的简介, 1,2023-07-28 09:51:51, 2023-07-27 11:44:22, 0
<== Total: 1
该条sql在数据库中查出4条,但通过代码仅查出一条。
看别人的文章说是因为mybatis-plus提供的QueryWrapper方法,在给它的参数是String类型时,在控制台上看着是对的,但是他会默认在参数的前面和后面加上单引号,因为在mybatis plus里的xml配置文件里(类似于UserInfoMapper.xml的文件),给的参数是用 #{参数名} 的方式。来源:Mybatis plus中使用in查询出错如何解决
我的解决办法:
String uniIds = "1,6,4,8";
List<Long> idList = convertStringToList(uniIds);
return list(new QueryWrapper<University>()
.lambda().in(University::getId, idList).eq(University::getEnabled,1));
private List<Long> convertStringToList(String input){
List<Long> resultList = Lists.newArrayList();
if (org.apache.commons.lang3.StringUtils.isBlank(input)) {
return resultList;
}
String[] stringArray = input.split(",");
for (String str : stringArray) {
resultList.add(Long.parseLong(str.trim()));
}
return resultList;
}