Mybatis-Plus: QueryWrapper的使用

在使用 BaseMapper提供的 CRUD接口时,我们为了使功能更强大,可以使用 QueryMapper来构造SQL语句。

Mybatis-Plus: QueryWrapper的使用

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。

 

上一篇:PHP CURL请求对方接口报HTTP Status 400 – Bad Request


下一篇:nodejs接收文件数据时遇到的坑