• MybatisPlus【SpringBoot】 5 条件构造器和常用接口 5.1 wrapper 介绍 & 5.2 QueryWrapper


    MybatisPlus【SpringBoot】

    【【尚硅谷】2022版MyBatisPlus教程(一套玩转mybatis-plus)】

    5 条件构造器和常用接口

    5.1 wrapper 介绍

    在这里插入图片描述

    • Wrapper : 条件构造抽象类,最顶端父类
      • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
        • QueryWrapper : 查询条件封装
        • UpdateWrapper : Update 条件封装
        • AbstractLambdaWrapper : 使用Lambda 语法
          • LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
          • LambdaUpdateWrapper : Lambda 更新封装Wrapper
    5.2 QueryWrapper
    5.2.1 例1:组装查询条件

    查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
    SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)

    //查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
    @Test
    public void test01(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("username","a")
                .between("age",20,30)
                .isNotNull("email");
    
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    测试结果:

    在这里插入图片描述

    在这里插入图片描述

    这是因为数据库中,唯一一条满足条件的记录已经被我们逻辑删除了。

    把第一条数据的逻辑删除手动改成0,再试一次

    在这里插入图片描述

    5.2.2 例2:组装排序条件

    按年龄降序查询用户,如果年龄相同则按id升序排列
    SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC

    //按年龄降序查询用户,如果年龄相同则按id升序排列
    @Test
    public void test02(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("id");
    
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试结果

    在这里插入图片描述

    5.2.3 例3:组装删除条件

    删除email为空的用户
    DELETE FROM t_user WHERE (email IS NULL)【因为我们设置了逻辑删除,所以只是更新操作】

    //删除email为空的用户
    @Test
    public void test03(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("email");
        int result = userMapper.delete(queryWrapper);
        System.out.println("受影响的行数:" + result);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    测试结果:

    在这里插入图片描述

    5.2.4 例4:条件的优先级

    将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
    UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND age > ? OR email IS NULL)

    //将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
    @Test
    public void test04(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("username","a")
                .gt("age",20)
                .or()
                .isNull("email");
    
        User user = new User();
        user.setAge(18);
        user.setEmail("user@atguigu.com");
        int result = userMapper.update(user,queryWrapper);
        System.out.println("受影响的行数:" + result);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试结果:

    在这里插入图片描述

    将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
    UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND (age > ? OR email IS NULL))
    lambda表达式内的逻辑优先运算

    //将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
    @Test
    public void test05() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("username", "a")
                .and(i -> i.gt("age", 20).or().isNull("email"));
    
        User user = new User();
        user.setAge(18);
        user.setEmail("hah@atguigu.com");
        int result = userMapper.update(user,queryWrapper);
        System.out.println("受影响的行数:" + result);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试结果

    在这里插入图片描述

    OK。

    5.2.5 例5:组装select子句

    查询用户信息的username和age字段
    SELECT username,age FROM t_user

    //查询用户信息的username和age字段
    @Test
    public void test06(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("username","age");
        List<Map<String , Object>> maps = userMapper.selectMaps(queryWrapper);
    
        maps.forEach(System.out::println);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    5.2.6 例6:实现子查询

    查询id小于等于3的用户信息
    SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (id IN
    (select id from t_user where id <= 3))

    //查询id小于等于3的用户信息
    @Test
    public void test07(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.inSql("uid","select uid from t_user where uid <= 3");
        List<User> list = userMapper.selectList(queryWrapper);
    
        list.forEach(System.out::println);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试结果:

    在这里插入图片描述

    OK。

  • 相关阅读:
    列式存储的分布式数据库——HBase Shell与SQL实战操作(HBase Master高可用实现)
    vue中如何获取到当前位置的天气
    单元格合并报java.lang.IllegalArgumentException
    小程序:下拉刷新+上拉加载+自定义导航栏
    让STM32CubeMX带你飞,菜鸟秒变STM32高手
    Java Web 开发详解
    一个简单的HTML网页(千与千寻电影) 大二学生网页设计与制作 电影主题网页制作
    14:00面试,14:06就出来了,问的问题有点变态。。。
    【PX4-AutoPilot教程-TIPS】PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法
    基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127456889