今天在使用mybatisplus时需要将and后面的or条件使用括号包起来
@ApiOperation(value = "查看粉丝列表", notes = "查看粉丝列表")
@PostMapping("/fansList")
public ResultVO<ResultListVO<LitemallBusiness>> fansList(@RequestParam(value = "bid") Integer bid,
@RequestParam(value = "nickName", required = false) String nickName) {
try {
QueryWrapper<LitemallBusiness> queryWrapperw = new QueryWrapper<LitemallBusiness>();
queryWrapperw.eq("pid", bid).or().eq("pid2",bid);
if (nickName != null && !nickName.equals("")) {
queryWrapperw.like("nick_name", nickName);
}
queryWrapperw.eq("deleted", false);
List<LitemallBusiness> litemall_businessList = businessService.list(queryWrapperw);
return ResponseUtil.okList(litemall_businessList);
} catch (Exception e) {
e.printStackTrace();
return ResponseUtil.serious();
}
}
打印输出的sqlselect * form litemall_business where deleted=0 and pid=1 or pid2=1
此条sql是没办法满足我需要的数据
实际上的我需要执行的sql是需要把and后面的or用()包起来作为一个条件来查询
所以mybatisplus的原生查询方法需要修改为:
@ApiOperation(value = "查看粉丝列表", notes = "查看粉丝列表")
@PostMapping("/fansList")
public ResultVO<ResultListVO<LitemallBusiness>> fansList(@RequestParam(value = "bid") Integer bid,
@RequestParam(value = "nickName", required = false) String nickName) {
try {
QueryWrapper<LitemallBusiness> queryWrapperw = new QueryWrapper<LitemallBusiness>();
queryWrapperw.and(wrapper -> wrapper.eq("pid", bid).or().eq("pid2", bid));
// queryWrapperw.eq("pid", bid).or().eq("pid2",bid);
if (nickName != null && !nickName.equals("")) {
queryWrapperw.like("nick_name", nickName);
}
queryWrapperw.eq("deleted", false);
List<LitemallBusiness> litemall_businessList = businessService.list(queryWrapperw);
return ResponseUtil.okList(litemall_businessList);
} catch (Exception e) {
e.printStackTrace();
return ResponseUtil.serious();
}
}
这样sql打印出来就是:
select * form litemall_business where deleted=0 and (pid=1 or pid2=1)
这样就满足了我把and后面的or作为一个整体
这里需要注意的是:我的mybatisplus版本是3.0.7.1,这个版本中是没有andNew()的方法,所以需要使用这种方法时查看你的版本是否和我的一样,还有一点要注意,不要丢弃了语句中的.and()
这里顺便补充一下andNew()的写法
//mybatisplus版本3.0.7.1 jdk1.8
queryWrapperw.and(wrapper -> wrapper.eq("pid", bid).or().eq("pid2", bid));
//执行sql
select * form litemall_business where deleted=0 and (pid=1 or pid2=1)
//mybatisplus版本低于3.0.7.1
queryWrapperw.andNew().eq("pid", bid).or().eq("pid2", bid);
//执行sql
select * form litemall_business where deleted=0 and (pid=1 or pid2=1)
其实最终执行的sql是一样的
---------------------
作者:飞廉灬少将
来源:CSDN
原文:https://blog.csdn.net/weixin_44826433/article/details/106137788
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件