debug:查詢資料庫沒有返回值但是資料庫裡有值怎麼肥四
阿新 • • 發佈:2022-05-08
是這樣的,寫了一些簡單的程式碼到資料庫查詢使用者資訊。
controller是這樣的:
@GetMapping("{page}/{limit}") public Result list(@PathVariable Long page, @PathVariable Long limit, UserInfoQueryVo userInfoQueryVo) { Page<UserInfo> pageParam = new Page<>(page, limit); IPage<UserInfo> pageModel = userInfoService.selectPage(pageParam, userInfoQueryVo); return Result.ok(pageModel);
service的實現類是這樣的:
@Override public IPage<UserInfo> selectPage(Page<UserInfo> pageParam, UserInfoQueryVo userInfoQueryVo) { /** UserInfoQueryVo獲取條件值 */ String name = userInfoQueryVo.getKeyword(); /** 使用者名稱稱 */ Integer status = userInfoQueryVo.getStatus(); /** 使用者狀態 */ Integer authStatus = userInfoQueryVo.getAuthStatus(); /** 認證狀態 */ String createTimeBegin = userInfoQueryVo.getCreateTimeBegin(); String createTimeEnd = userInfoQueryVo.getCreateTimeEnd(); /** 對條件值進行非空判斷 */ QueryWrapper<UserInfo> wrapper = new QueryWrapper<>(); if (!StringUtils.isEmpty("name")) { wrapper.like("name", name); } if (!StringUtils.isEmpty(status)) { wrapper.eq("status", status); } if (!StringUtils.isEmpty(authStatus)) { wrapper.eq("auth_status", authStatus); } if (!StringUtils.isEmpty(createTimeBegin)) { wrapper.ge("create_time", createTimeBegin); } if (!StringUtils.isEmpty(createTimeEnd)) { wrapper.le("create_time", createTimeEnd); } /** 呼叫mapper的方法 */ Page<UserInfo> pages = baseMapper.selectPage(pageParam, wrapper); pages.getRecords().stream().forEach(item -> { this.packageUserInfo(item); }); return pages; }
但是返回的資料是空。
但是我自己看資料庫,明明是有三個值。
我這個其實查詢程式碼非常簡單,基本上都是用mybatis-plus做的。
那到底哪裡出錯了呢。
我決定先看實際執行的sql語句是啥。那怎麼看呢?一開始我開著debug模式,點進去看,不太行。後來就百度,百度到新增日誌的方法,在配置檔案裡新增:
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
果然就可以列印日誌了
我一開始還覺得這條語句裡帶著括號百分號啥的莫非還有什麼玄機,於是還特意下載了一個翻譯外掛,翻譯結果是:
然後我就研究這個name like是哪裡來的,最終找到了出錯的程式碼:
if (!StringUtils.isEmpty("name")) {
wrapper.like("name", name);
}
判斷是否為空的不應該是“name”而應該是name,我加了個引號當然永遠為真了。
破案了。