Mybatis plus使用in查询出错

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值