栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis-plus 中 like or and eq 的混合查询使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis-plus 中 like or and eq 的混合查询使用

Mybatis-plus 中 like()、 or()、 and()、 eq() 的混合查询使用【下面为项目中的代码片段】

一、测试的表结构与数据如下

二、需要与查询的原始sql如下:
需求:查询name中带 “a” 或者 class_level 中带 “22” 或者 ages 等于 22的名单!

SELECt * FROM student WHERe name LIKE '%a%' AND ( class_level LIKE '%22%' OR ages = 22);

查询结果

三、mybatis-plus的查询代码:

String name = "a";
String level = "22";
String ageStr = "22";
LambdaQueryWrapper query = new LambdaQueryWrapper<>();
query.like(StringUtils.isNotEmpty(name), Student::getName, name)
        .and(wrapper -> wrapper.like(StringUtils.isNotEmpty(level), Student::getClassLevel, level ).or().eq(ageStr.matches("^[1-9]\d*$"), Student::getAges, Integer.parseInt(ageStr)));
List studentList = studentService.list(query);

四、在实际工作中可能出现的问题,如果参数 ageStr并不是真正的数字时上面的写法是有问题的
因为 eq()函数会先执行 Integer.parseInt(ageStr) 然后再执行判断条件 ageStr.matches("1d*$")是否是正数;所以需要调整如下:

String name = "a";
String level = "22";
String ageStr = "s22";
LambdaQueryWrapper query = new LambdaQueryWrapper<>();
query.like(StringUtils.isNotEmpty(name), Student::getName, name);
if (ageStr.matches("^[1-9]\d*$")) {  //判断 ageStr是否是正数
    query.and(wrapper -> wrapper.like(StringUtils.isNotEmpty(level), Student::getClassLevel, level ).or().eq(Student::getAges, Integer.parseInt(ageStr)));
} else {
    query.and(wrapper -> wrapper.like(StringUtils.isNotEmpty(level), Student::getClassLevel, level ));
}
List studentList = studentService.list(query);

  1. 1-9 ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号