使用mybaits通过querywrapper实现多条件查询

 在项目中可以直接应用这段代码,主要将其中的实体类换成自己实际需要的实体即可

@GetMapping(value = "/list")

    public Result<IPage<SysChannel>> queryPageList(SysChannel sysChannel,
                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                   @RequestParam(name = "pageSize", defaultValue = "100000") Integer pageSize,
                                                   HttpServletRequest req) {
        Result<IPage<SysChannel>> result = new Result<IPage<SysChannel>>();
        QueryWrapper<SysChannel> queryWrapper = QueryGenerator.initQueryWrapper(sysChannel, req.getParameterMap());
        Page<SysChannel> page = new Page<SysChannel>(pageNo, pageSize);
        IPage<SysChannel> pageList = sysChannelService.page(page, queryWrapper);
        result.setSuccess(true);
        result.setResult(pageList);
        return result;
    }

 

在这里总结一下querywrapper的简单使用方法,图片总结摘抄自:参考链接

示例代码:

   QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
        userWrapper.and(wrapper->wrapper.eq("username", "test2").or().eq("username", "test2"))
                .or(wrapper -> wrapper.like("username", "test2").or().like("username", "test2"));

# SELECT * FROM student WHERE ( username = ? OR username = ? ) OR ( username LIKE ? OR username LIKE ? )

querywrapper提供了一个链式的构造方法,可以根据实际情况对查询条件进行链式的定义

 

与querywrapper类似LambdaQueryWrapper同样能够实现条件查询的构造

二者的区别:

querywrapper的写法

        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .eq(StringUtils.isNotBlank(user.getName()), "nick", user.getName())
                .eq(user.getId() != null,"id", user.getId());
        List<User> userList = userDao.selectList(wrapper);

LambdaQueryWrapper的写法

 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
                .eq(StringUtils.isNotBlank(user.getName()), User::getName, user.getName())
                .eq(user.getId() != null, User::getId, user.getId());
        List<User> userList = userDao.selectList(wrapper);

通过对比会发现querywrapper中需要填入的是一个对应的字段值,如果这其中的字段值出现错误,在实际运行过程中就会出现错误,增加排查错误的时间,而LambdaQueryWrapper使用的是类似于类对象的形式,通过类的方式就能进行约束,如果写法错误,在编译阶段就能够明显看出来,这就在一定程度上减少了错误的发生

 

posted on 2022-01-18 15:58  一往无前!  阅读(3777)  评论(0编辑  收藏  举报