1. 程式人生 > 其它 >debug:查詢資料庫沒有返回值但是資料庫裡有值怎麼肥四

debug:查詢資料庫沒有返回值但是資料庫裡有值怎麼肥四

是這樣的,寫了一些簡單的程式碼到資料庫查詢使用者資訊。
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,我加了個引號當然永遠為真了。
破案了。