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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM