1. 程式人生 > 其它 >Mybatis-Plus: QueryWrapper的使用

Mybatis-Plus: QueryWrapper的使用

在使用 BaseMapper提供的 CRUD介面時,我們為了使功能更強大,可以使用 QueryMapper來構造SQL語句。

1. 使用 eq

        QueryWrapper<Train> trainQueryWrapper = new QueryWrapper<>();
        trainQueryWrapper.eq("id", trainId)
                .eq("status", TrainResult.STATUS_EXIST);
        Train train = trainMapper.selectOne(trainQueryWrapper);

  eq表示相等,這裡值得注意的是:多個eq連用,兩兩之間預設為有一個and進行連線。上面的語句表示:在train表中找出一個Train物件(selectOne方法可以根據提供的QueryWrapper,在表中找到一個對應的物件,如果找不到就返回null),它的 id 與 trainId 相等,status與TrainResult.STATUS_EXIST 相等。注意雙引號裡是資料庫裡的欄位名稱,因此如果有屬性為公司id,對應的是 company_id,而不是 companyId。

2. and與or連用

        QueryWrapper<Users> usersQueryWrapper = new
QueryWrapper<>(); usersQueryWrapper.eq("id", tokenDto.getId()); usersQueryWrapper.and(wrapper -> wrapper.eq("status", UsersResult.STATUS_EXIST) .or() .eq("status", UsersResult.BAN)); //根據id找到對應的使用者 Users users = usersMapper.selectOne(usersQueryWrapper);

  我們本來的意圖是:找到一個 user,它的id與 tokenDto.getId() 相同,並且它的 status為 EXIST 或者 BAN。但如果我們直接寫 eq,就會變成:找一個 user,它的 id 與tokenDto.getId()相同,並且它的status為 EXIST。或者 user的status為BAN。也就是說,and的優先順序比or要高,它會把本應該為 或者 的兩個選項搶過來一個

  因此我們需要使用上面的這種寫法,相當於給 or 加了個小括號,把他們當作了一個 wrapper 整體

3. 使用ge

        QueryWrapper<Train> trainQueryWrapper = new QueryWrapper<>();
        trainQueryWrapper.eq("company_id", users.getCompanyId())
                .eq("status", TrainResult.STATUS_EXIST)
                .ge("end_time", System.currentTimeMillis());
        //trainList為空不報錯
        List<Train> trainList = trainMapper.selectList(trainQueryWrapper);

  ge表示大於等於,注意一下邏輯關係即可,這裡的語句表示 "end_time"裡的內容要 大於等於 當前的時間(注意別寫反了)。selectList方法可以根據提供的 QueryWrapper,在資料庫中搜索符合的物件,並返回一個List。

4. 使用between

            usersQueryWrapper.between("uptime", begin, end);
            usersQueryWrapper.and(wrapper -> wrapper.eq("status", UsersResult.STATUS_EXIST)
                    .or()
                    .eq("status", UsersResult.BAN));

  begin <= uptime <= end,注意使用between時也要注意加括號保證or的結合。

5. clear方法

            usersQueryWrapper.clear();

  可以清除之前 QueryWrapper的所有設定,變成一個剛生成的QueryWrapper。