Mybatis-plus sql 查询 优先级 括号应用

97 阅读1分钟

遇到的问题

sql查询语句

多种嵌套查询 根据公司名称(必填),设备类型(选填) 还有搜索框->{编号或名称}(选填)

搜索框 like查询 or 连接 编号和名称 得作为一个判断条件

image.png

错误写法


@PostMapping("/getDeviceList")
@ApiOperation("获取设备list信息")
public CommonResult<List<TfDevice>> getDeviceList(@RequestBody ToListVO toListVO){
           QueryWrapper<TfDevice> tfDeviceQueryWrapper = new QueryWrapper<>();
    tfDeviceQueryWrapper
            .select("id","dev_name","dev_state","number","dev_place","dev_price")
            .eq("company_name",toListVO.getCompanyName())
            .ne("dev_state",SystemConstant.NUM_TWO)
            .eq(!StrUtil.isEmpty(toListVO.getCategory()),"dev_category",toListVO.getCategory())
            .like(!StrUtil.isEmpty(toListVO.getQueryKey()),"number",toListVO.getQueryKey())
            //这里加or 相当于 前面全部作为一个条件 后面一个like 也作为一个条件
            .or()
            .like(!StrUtil.isEmpty(toListVO.getQueryKey()),"dev_name",toListVO.getQueryKey())
            .orderByDesc("create_time");
    return process(()-> page(toListVO.getPageNum(),tfDeviceQueryWrapper));
}

image.png

解决方案



@Autowired
private TfDeviceService tfDeviceService;


/**
 * 查询列表进行分页
 * @param pageNum 分页类
 * @param queryWrapper 查询条件
 * @author zhangsan
 * @return
 */
public List<TfDevice> page(PageInfoVO pageNum, @Param("ew") Wrapper<TfDevice> queryWrapper){
    Page<TfDevice> categoryPage = new Page<>(pageNum.getPageNum(), pageNum.getPageSize());
    Page<TfDevice> info =tfDeviceService.page(categoryPage,queryWrapper);
    return info.getRecords();
}


@PostMapping("/getDeviceList")
@ApiOperation("获取设备list信息")
public CommonResult<List<TfDevice>> getDeviceList(@RequestBody ToListVO toListVO){
           QueryWrapper<TfDevice> tfDeviceQueryWrapper = new QueryWrapper<>();
    tfDeviceQueryWrapper
            .select("id","dev_name","dev_state","number","dev_place","dev_price")
            .eq("company_name",toListVO.getCompanyName())
            .ne("dev_state",SystemConstant.NUM_TWO)
            .eq(!StrUtil.isEmpty(toListVO.getCategory()),"dev_category",toListVO.getCategory())
            //and 里面嵌套wrapper语句 就可以实现括号效果
           .and(!StrUtil.isEmpty(toListVO.getQueryKey()),tfDeviceQueryWrapper1->tfDeviceQueryWrapper1
                    .like("number",toListVO.getQueryKey())
                    .or()
                    .like("dev_name",toListVO.getQueryKey()))
            .orderByDesc("create_time");
    return process(()-> page(toListVO.getPageNum(),tfDeviceQueryWrapper));
}

打印完成的sql语句

image.png