在項目中可以直接應用這段代碼,主要將其中的實體類換成自己實際需要的實體即可
@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使用的是類似於類對象的形式,通過類的方式就能進行約束,如果寫法錯誤,在編譯階段就能夠明顯看出來,這就在一定程度上減少了錯誤的發生