使用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使用的是类似于类对象的形式,通过类的方式就能进行约束,如果写法错误,在编译阶段就能够明显看出来,这就在一定程度上减少了错误的发生