ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis-Plus: QueryWrapper的使用

2022-03-01 21:01:42  阅读:324  来源: 互联网

标签:status QueryWrapper usersQueryWrapper Plus Mybatis EXIST eq id


在使用 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。

 

标签:status,QueryWrapper,usersQueryWrapper,Plus,Mybatis,EXIST,eq,id
来源: https://www.cnblogs.com/Acc222222/p/15951491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有